📄 lencod.c
字号:
if(input->InterlaceCodingOption >= MB_CODING)
{
// memory_size += get_mem3Dint(&tmp_mv_top_save, 2, height_field/BLOCK_SIZE, img->width/BLOCK_SIZE+4);
// memory_size += get_mem3Dint(&tmp_mv_bot_save, 2, height_field/BLOCK_SIZE, img->width/BLOCK_SIZE+4);
// memory_size += get_mem2Dint(&refFrArr_top_save, height_field/BLOCK_SIZE, img->width/BLOCK_SIZE);
// memory_size += get_mem2Dint(&refFrArr_bot_save, height_field/BLOCK_SIZE, img->width/BLOCK_SIZE);
}
}
#ifdef _Fast_ME_
memory_size += get_mem_FME();
#endif
return (memory_size);
}
/*!
************************************************************************
* \brief
* Free allocated memory of frame size related global buffers
* buffers are defined in global.h, allocated memory is allocated in
* int get_mem4global_buffers()
* \par Input:
* Input Parameters struct inp_par *inp, \n
* Image Parameters struct img_par *img
* \par Output:
* none
************************************************************************
*/
void free_global_buffers()
{
int i,j;
#ifdef _ADAPT_LAST_GROUP_
extern int *last_P_no_frm;
extern int *last_P_no_fld;
free (last_P_no_frm);
free (last_P_no_fld);
#endif
free_mem2D(imgY_org_frm); // free ref frame buffers
free_mem3D(imgUV_org_frm,2);
free_mem3Dint(tmp_mv_frm,2);
free_mem2Dint(refFrArr_frm);
// free multiple ref frame buffers
// number of reference frames increased by one for next P-frame
if (input->WeightedPrediction || input->WeightedBiprediction)
free(mref_frm_w);
if (input->WeightedPrediction || input->WeightedBiprediction)
free (Refbuf11_frm_w);
// free multiple ref frame buffers
// number of reference frames increased by one for next P-frame
if(input->successive_Bframe!=0 || input->StoredBPictures > 0)
{
// free last P-frame buffers for B-frame coding
free_mem3Dint(tmp_fwMV,2);
free_mem3Dint(tmp_bwMV,2);
free_mem3Dint(dfMV,2);
free_mem3Dint(dbMV,2);
free_mem2Dint(fw_refFrArr_frm);
free_mem2Dint(bw_refFrArr_frm);
if (input->direct_type)
{
free_mem2Dint(moving_block_frm);
free_mem2Dint(fwdir_refFrArr);
free_mem2Dint(bwdir_refFrArr);
}
} // end if B frame
free_mem2Dint(abp_type_FrArr);
free_mem2Dint(img4Y_tmp); // free temp quarter pel frame buffer
// free mem, allocated in init_img()
// free intra pred mode buffer for blocks
free_mem2Dint(img->ipredmode);
free(img->mb_data);
if(input->UseConstrainedIntraPred)
{
free (img->intra_block);
}
if (input->rdopt==2)
{
free(decs->resY[0]);
free(decs->resY);
free(decs->RefBlock[0]);
free(decs->RefBlock);
for (j=0; j<input->NoOfDecoders; j++)
{
free(decs->decY[j][0]);
free(decs->decY[j]);
free(decs->decY_best[j][0]);
free(decs->decY_best[j]);
for (i=0; i<img->buf_cycle+1; i++)
{
free(decs->decref[j][i][0]);
free(decs->decref[j][i]);
}
free(decs->decref[j]);
}
free(decs->decY);
free(decs->decY_best);
free(decs->decref);
free(decs->status_map[0]);
free(decs->status_map);
free(decs->dec_mb_mode[0]);
free(decs->dec_mb_mode);
}
if (input->RestrictRef)
{
free(pixel_map[0]);
free(pixel_map);
free(refresh_map[0]);
free(refresh_map);
}
if(input->InterlaceCodingOption != FRAME_CODING)
{
free_mem2D(imgY_com);
free_mem3D(imgUV_com,2);
free_mem2D(imgY_org_top); // free ref frame buffers
free_mem3D(imgUV_org_top,2);
free_mem2D(imgY_org_bot); // free ref frame buffers
free_mem3D(imgUV_org_bot,2);
// free multiple ref frame buffers
// number of reference frames increased by one for next P-frame
if (input->WeightedPrediction || input->WeightedBiprediction)
free(mref_fld_w);
if(input->successive_Bframe!=0 || input->StoredBPictures > 0)
{
// free last P-frame buffers for B-frame coding
free_mem2Dint(fw_refFrArr_top);
free_mem2Dint(bw_refFrArr_top);
free_mem2Dint(fw_refFrArr_bot);
free_mem2Dint(bw_refFrArr_bot);
if (input->direct_type)
{
free_mem2Dint(moving_block_top);
free_mem2Dint(moving_block_bot);
}
} // end if B frame
if ( input->WeightedPrediction || input->WeightedBiprediction)
free (Refbuf11_fld_w);
free_mem3Dint(tmp_mv_top,2);
free_mem3Dint(tmp_mv_bot,2);
free_mem2Dint(refFrArr_top);
free_mem2Dint(refFrArr_bot);
free_mem2Dint(abp_type_FrArr_top);
free_mem2Dint(abp_type_FrArr_bot);
}
// CAVLC mem free
for(j=0;j<img->width/MB_BLOCK_SIZE;j++)
{
free_mem3Dint(img->nz_coeff[j], img->height/MB_BLOCK_SIZE);
}
if (img->nz_coeff !=NULL) free(img->nz_coeff );
free_mem2Dint(img->field_anchor);
#ifdef _Fast_ME_
free_mem_FME();
#endif
}
/*!
************************************************************************
* \brief
* Allocate memory for mv
* \par Input:
* Image Parameters struct img_par *img \n
* int****** mv
* \return memory size in bytes
************************************************************************
*/
int get_mem_mv (int****** mv)
{
int i, j, k, l;
if ((*mv = (int*****)calloc(4,sizeof(int****))) == NULL)
no_mem_exit ("get_mem_mv: mv");
for (i=0; i<4; i++)
{
if (((*mv)[i] = (int****)calloc(4,sizeof(int***))) == NULL)
no_mem_exit ("get_mem_mv: mv");
for (j=0; j<4; j++)
{
if (((*mv)[i][j] = (int***)calloc(img->buf_cycle,sizeof(int**))) == NULL)
no_mem_exit ("get_mem_mv: mv");
for (k=0; k<img->buf_cycle; k++)
{
if (((*mv)[i][j][k] = (int**)calloc(9,sizeof(int*))) == NULL)
no_mem_exit ("get_mem_mv: mv");
for (l=0; l<9; l++)
if (((*mv)[i][j][k][l] = (int*)calloc(2,sizeof(int))) == NULL)
no_mem_exit ("get_mem_mv: mv");
}
}
}
return 4*4*img->buf_cycle*9*2*sizeof(int);
}
/*!
************************************************************************
* \brief
* Free memory from mv
* \par Input:
* int****** mv
************************************************************************
*/
void free_mem_mv (int***** mv)
{
int i, j, k, l;
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
for (k=0; k<img->buf_cycle; k++)
{
for (l=0; l<9; l++)
free (mv[i][j][k][l]);
free (mv[i][j][k]);
}
free (mv[i][j]);
}
free (mv[i]);
}
free (mv);
}
/*!
************************************************************************
* \brief
* Allocate memory for AC coefficients
************************************************************************
*/
int get_mem_ACcoeff (int***** cofAC)
{
int i, j, k;
if ((*cofAC = (int****)calloc (6, sizeof(int***))) == NULL) no_mem_exit ("get_mem_ACcoeff: cofAC");
for (k=0; k<6; k++)
{
if (((*cofAC)[k] = (int***)calloc (4, sizeof(int**))) == NULL) no_mem_exit ("get_mem_ACcoeff: cofAC");
for (j=0; j<4; j++)
{
if (((*cofAC)[k][j] = (int**)calloc (2, sizeof(int*))) == NULL) no_mem_exit ("get_mem_ACcoeff: cofAC");
for (i=0; i<2; i++)
{
if (((*cofAC)[k][j][i] = (int*)calloc (65, sizeof(int))) == NULL) no_mem_exit ("get_mem_ACcoeff: cofAC"); // 18->65 for ABT
}
}
}
return 6*4*2*65*sizeof(int);// 18->65 for ABT
}
/*!
************************************************************************
* \brief
* Allocate memory for DC coefficients
************************************************************************
*/
int get_mem_DCcoeff (int**** cofDC)
{
int j, k;
if ((*cofDC = (int***)calloc (3, sizeof(int**))) == NULL) no_mem_exit ("get_mem_DCcoeff: cofDC");
for (k=0; k<3; k++)
{
if (((*cofDC)[k] = (int**)calloc (2, sizeof(int*))) == NULL) no_mem_exit ("get_mem_DCcoeff: cofDC");
for (j=0; j<2; j++)
{
if (((*cofDC)[k][j] = (int*)calloc (65, sizeof(int))) == NULL) no_mem_exit ("get_mem_DCcoeff: cofDC"); // 18->65 for ABT
}
}
return 3*2*65*sizeof(int); // 18->65 for ABT
}
/*!
************************************************************************
* \brief
* Free memory of AC coefficients
************************************************************************
*/
void free_mem_ACcoeff (int**** cofAC)
{
int i, j, k;
for (k=0; k<6; k++)
{
for (i=0; i<4; i++)
{
for (j=0; j<2; j++)
{
free (cofAC[k][i][j]);
}
free (cofAC[k][i]);
}
free (cofAC[k]);
}
free (cofAC);
}
/*!
************************************************************************
* \brief
* Free memory of DC coefficients
************************************************************************
*/
void free_mem_DCcoeff (int*** cofDC)
{
int i, j;
for (j=0; j<3; j++)
{
for (i=0; i<2; i++)
{
free (cofDC[j][i]);
}
free (cofDC[j]);
}
free (cofDC);
}
/*!
************************************************************************
* \brief
* form frame picture from two field pictures
************************************************************************
*/
void combine_field()
{
int i;
for (i=0; i<img->height / 2; i++)
{
memcpy(imgY_com[i*2], enc_top_picture->imgY[i], img->width); // top field
memcpy(imgY_com[i*2 + 1], enc_bottom_picture->imgY[i], img->width); // bottom field
}
for (i=0; i<img->height_cr / 2; i++)
{
memcpy(imgUV_com[0][i*2], enc_top_picture->imgUV[0][i], img->wid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -