Skip to content

Commit

Permalink
Merge pull request #44 from mpeg5/xevd_stabilization_fix_v2
Browse files Browse the repository at this point in the history
Decoder code clean up, intra pred right neighbor access modification based on ETM spec
  • Loading branch information
mpeg5 committed Dec 21, 2022
2 parents 5b92cd6 + 2c4efa4 commit 4e76654
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 118 deletions.
74 changes: 41 additions & 33 deletions app/xevd_app.c
Expand Up @@ -66,14 +66,14 @@ static int read_bitstream(FILE * fp, int * pos, unsigned char * bs_buf)
ret = xevd_info(nalu_len_buf, XEVD_NAL_UNIT_LENGTH_BYTE, 1, &info);
if (XEVD_FAILED(ret)) {
logv0("Cannot get bitstream information\n");
return -1;
return XEVD_ERR;
}
bs_size = info.nalu_len;

if(bs_size <= 0)
{
logv0("Invalid bitstream size![%d]\n", bs_size);
return -1;
return XEVD_ERR;
}

while(bs_size)
Expand All @@ -82,7 +82,7 @@ static int read_bitstream(FILE * fp, int * pos, unsigned char * bs_buf)
if (1 != fread(&b, 1, 1, fp))
{
logv0("Cannot read bitstream!\n");
return -1;
return XEVD_ERR;
}
bs_buf[read_size] = b;
read_size++;
Expand All @@ -94,13 +94,13 @@ static int read_bitstream(FILE * fp, int * pos, unsigned char * bs_buf)
if(feof(fp)) {logv2("End of file\n");}
else {logv0("Cannot read bitstream size!\n")};

return -1;
return XEVD_ERR;
}
}
else
{
logv0("Cannot seek bitstream!\n");
return -1;
return XEVD_ERR;
}

return read_size;
Expand Down Expand Up @@ -182,7 +182,7 @@ static int set_extra_config(XEVD id)
if(XEVD_FAILED(ret))
{
logv0("failed to set config for picture signature\n");
return -1;
return XEVD_ERR;
}
}

Expand All @@ -199,7 +199,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get width\n");
return -1;
return XEVD_ERR;
}
logv2("width = %d\n", width);

Expand All @@ -208,7 +208,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get height\n");
return -1;
return XEVD_ERR;
}
logv2("height = %d\n", height);

Expand All @@ -217,7 +217,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get coded_width\n");
return -1;
return XEVD_ERR;
}
logv2("coded_width = %d\n", coded_width);

Expand All @@ -226,7 +226,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get coded_height\n");
return -1;
return XEVD_ERR;
}
logv2("coded_height = %d\n", coded_height);

Expand All @@ -235,7 +235,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get color_space\n");
return -1;
return XEVD_ERR;
}
switch(color_space)
{
Expand All @@ -259,7 +259,7 @@ static int get_extra_config(XEVD id)
if (XEVD_FAILED(ret))
{
logv2("failed to get max_coding_delay\n");
return -1;
return XEVD_ERR;
}
logv2("max_coding_delay = %d\n", max_coding_delay);
return 0;
Expand Down Expand Up @@ -300,7 +300,7 @@ static int write_y4m_header(char * fname, XEVD_IMGB * img)
if (c_buf == NULL)
{
logv0("Color format is not suuported by y4m");
return -1;
return XEVD_ERR;
}

/*setting fps to 30 by default as there is no fps related parameter */
Expand All @@ -312,9 +312,13 @@ static int write_y4m_header(char * fname, XEVD_IMGB * img)
if (fp == NULL)
{
logv0("cannot open file = %s\n", fname);
return -1;
return XEVD_ERR;
}
if (buff_len != fwrite(buf, 1, buff_len, fp))
{
fclose(fp);
return XEVD_ERR;
}
if (buff_len != fwrite(buf, 1, buff_len, fp)) return -1;
fclose(fp);
return XEVD_OK;

Expand All @@ -327,9 +331,13 @@ static int write_y4m_frame_header(char * fname)
if (fp == NULL)
{
logv0("cannot open file = %s\n", fname);
return -1;
return XEVD_ERR;
}
if (6 != fwrite("FRAME\n", 1, 6, fp))
{
fclose(fp);
return XEVD_ERR;
}
if (6 != fwrite("FRAME\n", 1, 6, fp)) return -1;
fclose(fp);
return XEVD_OK;

Expand All @@ -341,9 +349,9 @@ static int write_dec_img(XEVD id, char * fname, XEVD_IMGB * img, XEVD_IMGB * img
imgb_cpy(imgb_t, img);
if (flag_y4m)
{
if(write_y4m_frame_header(op_fname_out)) return -1;
if(write_y4m_frame_header(op_fname_out)) return XEVD_ERR;
}
if(imgb_write(op_fname_out, imgb_t)) return -1;
if(imgb_write(op_fname_out, imgb_t)) return XEVD_ERR;
return XEVD_OK;
}

Expand Down Expand Up @@ -378,7 +386,7 @@ int main(int argc, const char **argv)
{
if(ret > 0) logv0("-%c argument should be set\n", ret);
print_usage();
return -1;
return XEVD_ERR;
}

logv1("eXtra-fast Essential Video Decoder\n");
Expand All @@ -388,7 +396,7 @@ int main(int argc, const char **argv)
{
logv0("ERROR: cannot open bitstream file = %s\n", op_fname_inp);
print_usage();
return -1;
return XEVD_ERR;
}

if(op_flag[OP_FLAG_FNAME_OUT])
Expand All @@ -398,9 +406,9 @@ int main(int argc, const char **argv)
if(strlen(op_fname_out) < 5) /* x.yuv or x.y4m */
{
logv0("ERROR: invalide output file name\n");
return -1;
return XEVD_ERR;
}
strcpy(fext, op_fname_out + strlen(op_fname_out) - 3);
strncpy(fext, op_fname_out + strlen(op_fname_out) - 3, 3);
fext[0] = toupper(fext[0]);
fext[1] = toupper(fext[1]);
fext[2] = toupper(fext[2]);
Expand All @@ -416,7 +424,7 @@ int main(int argc, const char **argv)
else
{
logv0("ERROR: unknown output format\n");
return -1;
return XEVD_ERR;
}
/* remove decoded file contents if exists */
FILE * fp;
Expand All @@ -425,7 +433,7 @@ int main(int argc, const char **argv)
{
logv0("ERROR: cannot create a decoded file\n");
print_usage();
return -1;
return XEVD_ERR;
}
fclose(fp);
}
Expand All @@ -434,20 +442,20 @@ int main(int argc, const char **argv)
if(bs_buf == NULL)
{
logv0("ERROR: cannot allocate bit buffer, size=%d\n", MAX_BS_BUF);
return -1;
return XEVD_ERR;
}
cdsc.threads = (int)op_threads;

id = xevd_create(&cdsc, NULL);
if(id == NULL)
{
logv0("ERROR: cannot create XEVD decoder\n");
return -1;
return XEVD_ERR;
}
if(set_extra_config(id))
{
logv0("ERROR: cannot set extra configurations\n");
return -1;
return XEVD_ERR;
}

pic_cnt = 0;
Expand Down Expand Up @@ -497,7 +505,7 @@ int main(int argc, const char **argv)
if(XEVD_FAILED(ret))
{
logv0("failed to decode bitstream\n");
proc_ret = -1;
proc_ret = XEVD_ERR;
goto END;
}

Expand All @@ -518,13 +526,13 @@ int main(int argc, const char **argv)
if(ret == XEVD_ERR_UNEXPECTED)
{
logv2("bumping process completed\n");
proc_ret = 0;
proc_ret = XEVD_OK;
goto END;
}
else if(XEVD_FAILED(ret))
{
logv0("failed to pull the decoded image\n");
proc_ret = -1;
proc_ret = XEVD_ERR;
goto END;
}
}
Expand Down Expand Up @@ -565,7 +573,7 @@ int main(int argc, const char **argv)
if(imgb_t == NULL)
{
logv0("failed to allocate temporay image buffer\n");
proc_ret = -1;
proc_ret = XEVD_ERR;
goto END;
}
//Copy the actual width and height of input image to temporary image.
Expand All @@ -583,7 +591,7 @@ int main(int argc, const char **argv)
{
if(write_y4m_header(op_fname_out, imgb))
{
proc_ret = -1;
proc_ret = XEVD_ERR;
goto END;
}
}
Expand Down
23 changes: 12 additions & 11 deletions app/xevd_app_util.h
Expand Up @@ -172,18 +172,18 @@ static int imgb_read(FILE * fp, XEVD_IMGB * img)
size_l = f_w * f_h;
if(fread(img->a[0], 1, size_l, fp) != (unsigned)size_l)
{
return -1;
return XEVD_ERR;
}
size_cb = XEVDA_CRSHIFT(f_w, w_shift) * XEVDA_CRSHIFT(f_h, h_shift);
if(chroma_format != XEVD_CF_YCBCR400)
{
if(fread(img->a[1], 1, size_cb, fp) != (unsigned)size_cb)
{
return -1;
return XEVD_ERR;
}
if(fread(img->a[2], 1, size_cb, fp) != (unsigned)size_cb)
{
return -1;
return XEVD_ERR;
}
}
}
Expand All @@ -193,29 +193,29 @@ static int imgb_read(FILE * fp, XEVD_IMGB * img)
size_l = f_w * f_h * sizeof(short);
if(fread(img->a[0], 1, size_l, fp) != (unsigned)size_l)
{
return -1;
return XEVD_ERR;
}
size_cb = XEVDA_CRSHIFT(f_w, w_shift) * XEVDA_CRSHIFT(f_h, h_shift) *
sizeof(short);
if(chroma_format != XEVD_CF_YCBCR400)
{
if(fread(img->a[1], 1, size_cb, fp) != (unsigned)size_cb)
{
return -1;
return XEVD_ERR;
}
if(fread(img->a[2], 1, size_cb, fp) != (unsigned)size_cb)
{
return -1;
return XEVD_ERR;
}
}
}
else
{
logv0("not supported color space\n");
return -1;
return XEVD_ERR;
}

return 0;
return XEVD_OK;
}

static int imgb_write(char * fname, XEVD_IMGB * img)
Expand All @@ -229,7 +229,7 @@ static int imgb_write(char * fname, XEVD_IMGB * img)
if(fp == NULL)
{
logv0("cannot open file = %s\n", fname);
return -1;
return XEVD_ERR;
}
if ((img->cs & 0xff) != XEVD_CF_YCBCR400)
{
Expand All @@ -248,7 +248,8 @@ static int imgb_write(char * fname, XEVD_IMGB * img)
else
{
logv0("cannot support the color space\n");
return -1;
fclose(fp);
return XEVD_ERR;
}
for(i = 0; i < img->np; i++)
{
Expand Down Expand Up @@ -316,7 +317,7 @@ static int write_data(char * fname, unsigned char * data, int size)
if(fp == NULL)
{
logv0("cannot open an writing file=%s\n", fname);
return -1;
return XEVD_ERR;
}
fwrite(data, 1, size, fp);
fclose(fp);
Expand Down
1 change: 0 additions & 1 deletion src_base/xevd_picman.c
Expand Up @@ -456,7 +456,6 @@ XEVD_PIC * xevd_picman_get_empty_pic(XEVD_PM * pm, int * err, int bit_depth)

ERR:
if(err) *err = ret;
if(pic) pm->pa.fn_free(&pm->pa, pic);
return NULL;
}

Expand Down
5 changes: 2 additions & 3 deletions src_base/xevd_util.c
Expand Up @@ -1238,9 +1238,8 @@ void xevd_eco_sbac_ctx_initialize(SBAC_CTX_MODEL *model, s16 *ctx_init_model, u1
s32 i, slope, offset;
u16 mps, state;
const int qp = XEVD_CLIP3(0, 51, slice_qp);
const int is_inter_slice = (slice_type == SLICE_B || slice_type == SLICE_P);

ctx_init_model += (is_inter_slice * num_ctx);

ctx_init_model += ((slice_type == SLICE_B) * num_ctx);

for(i = 0; i < num_ctx; i++)
{
Expand Down

0 comments on commit 4e76654

Please sign in to comment.