📄 mp4einit.c
字号:
free_align_mem_mpeg4((void*)&enc_state->fwd_ref_frame.cb_ptr);
}
/* fwd_ref_rec_frame.cb_ptr */
if (enc_state->fwd_ref_rec_frame.cb_ptr) {
enc_state->fwd_ref_rec_frame.cb_ptr -= enc_state->frame_step_set.cb_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->fwd_ref_rec_frame.cb_ptr);
}
/* rec_frame.cb_ptr */
if (enc_state->rec_frame.cb_ptr) {
enc_state->rec_frame.cb_ptr -= enc_state->frame_step_set.cb_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->rec_frame.cb_ptr);
}
/* cur_frame.cr_ptr */
if (enc_state->cur_frame.cr_ptr) {
enc_state->cur_frame.cr_ptr -= enc_state->frame_step_set.cr_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->cur_frame.cr_ptr);
}
/* fwd_ref_frame.cr_ptr */
if (enc_state->fwd_ref_frame.cr_ptr) {
enc_state->fwd_ref_frame.cr_ptr -= enc_state->frame_step_set.cr_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->fwd_ref_frame.cr_ptr);
}
/* fwd_ref_rec_frame.cr_ptr */
if (enc_state->fwd_ref_rec_frame.cr_ptr) {
enc_state->fwd_ref_rec_frame.cr_ptr -= enc_state->frame_step_set.cr_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->fwd_ref_rec_frame.cr_ptr);
}
/* rec_frame.cr_ptr */
if (enc_state->rec_frame.cr_ptr) {
enc_state->rec_frame.cr_ptr -= enc_state->frame_step_set.cr_step
* SAMPLE_VIDEO_MB_SIZE / 2 + SAMPLE_VIDEO_MB_SIZE / 2;
free_align_mem_mpeg4((void*)&enc_state->rec_frame.cr_ptr);
}
/* coef_buf_row.y_ptr */
if (enc_state->coef_buf_row.y_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_row.y_ptr);
}
/* coef_buf_col.y_ptr */
if (enc_state->coef_buf_row.y_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_col.y_ptr);
}
/* coef_buf_row.cb_ptr */
if (enc_state->coef_buf_row.cb_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_row.cb_ptr);
}
/* coef_buf_col.cb_ptr */
if (enc_state->coef_buf_col.cb_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_col.cb_ptr);
}
/* coef_buf_row.cr_ptr */
if (enc_state->coef_buf_row.cr_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_row.cr_ptr);
}
/* coef_buf_col.cr_ptr */
if (enc_state->coef_buf_col.cr_ptr) {
free_align_mem_mpeg4((void*)&enc_state->coef_buf_col.cr_ptr);
}
/* mv_buf */
if (enc_state->mv_buf) {
free_align_mem_mpeg4((void*)&enc_state->mv_buf);
}
/* tranp_buf */
if (enc_state->tranp_buf) {
free_align_mem_mpeg4((void*)&enc_state->tranp_buf);
}
/* qp_buf */
if (enc_state->qp_buf) {
free_align_mem_mpeg4((void*)&enc_state->qp_buf);
}
/* info_pic */
if (enc_state->info_pic) {
free_align_mem_mpeg4((void*)&enc_state->info_pic);
}
/* qmatrix_intra & qmatrix_inter */
if (Q_MPEG4 == enc_state->quant_type) {
if (enc_state->qmatrix_intra) {
free_align_mem_mpeg4((void*)&enc_state->qmatrix_intra);
}
if (enc_state->qmatrix_inter) {
free_align_mem_mpeg4((void*)&enc_state->qmatrix_inter);
}
}
/* mv_plane */
if (enc_state->mv_plane) {
enc_state->mv_plane -= 4 + (enc_state->mb_per_row + 2) * 4;
free_align_mem_mpeg4((void*)&enc_state->mv_plane);
}
/* mb_type_plane */
if (enc_state->mb_type_plane) {
free_align_mem_mpeg4((void*)&enc_state->mb_type_plane);
}
/* ysum_plane */
if (enc_state->ysum_plane) {
free_align_mem_mpeg4((void*)&enc_state->ysum_plane);
}
/* blk_ref_buf */
if (enc_state->blk_ref_buf) {
free_align_mem_mpeg4((void*)&enc_state->blk_ref_buf);
}
/* blk_coef_buf */
if (enc_state->blk_coef_buf) {
free_align_mem_mpeg4((void*)&enc_state->blk_coef_buf);
}
/* resid_buf */
if (enc_state->resid_buf) {
free_align_mem_mpeg4((void*)&enc_state->resid_buf);
}
/* rec_resid_buf */
if (enc_state->rec_resid_buf) {
free_align_mem_mpeg4((void*)&enc_state->rec_resid_buf);
}
return SAMPLE_STATUS_NOERR;
}
/******************************************************************************
// Name: init_vop_infor_enc_mpeg4
// Desicription:
// Initialize VOP information struct at the beginning of
// encoding each VOP
// Input Arguments:
// enc_state Pointer to the general state struct of MPEG-4 encoder
// vop_infor Pointer to vop information struct of MPEG-4 encoder
//
// Output Arguments:
// enc_state Pointer to the updated state struct of MPEG-4 encoder
// vop_infor Pointer to updated vop infor struct of MPEG-4 encoder
//
// Returns:
// SAMPLE_STATUS_NOERR If succeeds
// Note:
// support I-VOP, P-VOP initialization
******************************************************************************/
sample_status init_vop_infor_enc_mpeg4 (mp4_enc_state *enc_state,
mp4_enc_vop_infor *vop_infor)
{
int i = 0;
/* init mb index */
vop_infor->mb_indx = 0;
/* init qp_buf ptr */
vop_infor->delta_qp = 0;
vop_infor->cur_qp = enc_state->vop_quant;
vop_infor->qp_buf = enc_state->qp_buf;
vop_infor->qp_buf[0] = vop_infor->cur_qp;
/* init buffer ptrs: ac/dc prediction coefficient buffer */
vop_infor->coef_buf_row.y_ptr = enc_state->coef_buf_row.y_ptr + 16;
vop_infor->coef_buf_col.y_ptr = enc_state->coef_buf_col.y_ptr;
vop_infor->coef_buf_row.cb_ptr = enc_state->coef_buf_row.cb_ptr + 8;
vop_infor->coef_buf_col.cb_ptr = enc_state->coef_buf_col.cb_ptr;
vop_infor->coef_buf_row.cr_ptr = enc_state->coef_buf_row.cr_ptr + 8;
vop_infor->coef_buf_col.cr_ptr = enc_state->coef_buf_col.cr_ptr;
/* init the dc coefficient on the upper border */
for(i = 0; i < enc_state->mb_per_row + 1 ; i++) {
enc_state->coef_buf_row.y_ptr [i*16] = (Ipp16s) -1;
enc_state->coef_buf_row.y_ptr [i*16+8] = (Ipp16s) -1;
enc_state->coef_buf_row.cb_ptr[i*8] = (Ipp16s) -1;
enc_state->coef_buf_row.cr_ptr[i*8] = (Ipp16s) -1;
}
/* init the dc coefficient on the left border */
enc_state->coef_buf_col.y_ptr[0] = (Ipp16s) -1;
enc_state->coef_buf_col.y_ptr[8] = (Ipp16s) -1;
enc_state->coef_buf_col.cb_ptr[0] = (Ipp16s) -1;
enc_state->coef_buf_col.cr_ptr[0] = (Ipp16s) -1;
/* init buffer ptrs: position the 1st MB in current VOP plane */
vop_infor->cur_mb.y_ptr = enc_state->cur_frame.y_ptr;
vop_infor->cur_mb.cb_ptr = enc_state->cur_frame.cb_ptr;
vop_infor->cur_mb.cr_ptr = enc_state->cur_frame.cr_ptr;
vop_infor->rec_mb.y_ptr = enc_state->rec_frame.y_ptr;
vop_infor->rec_mb.cb_ptr = enc_state->rec_frame.cb_ptr;
vop_infor->rec_mb.cr_ptr = enc_state->rec_frame.cr_ptr;
if (PVOP == enc_state->vop_coding_type) {
/* init vop_rouding_type for PVOP */
/* vop_rouding_type are switched between 0 and 1 alternatively
// along with the coded PVOPs */
enc_state->rounding ^= 0x00000001;
/* init two motion compensation function ptrs */
if(1 == enc_state->rounding) {
vop_infor->copy_block_func_ptr = (copy_block_func_ptr)
ippiMCBlock_RoundOn_8u;
} else {
vop_infor->copy_block_func_ptr = (copy_block_func_ptr)
ippiMCBlock_RoundOff_8u;
}
/* init vop_fcode_forward for PVOP */
/* Please refer to Table7-5 of ISO/IEC 14496-2:2001(E) */
if (16 > enc_state->search_range) {
vop_infor->fcode_fwd = 1;
} else if (32 > enc_state->search_range) {
vop_infor->fcode_fwd = 2;
} else if (64 > enc_state->search_range) {
vop_infor->fcode_fwd = 3;
} else if (128 > enc_state->search_range) {
vop_infor->fcode_fwd = 4;
} else if (256 > enc_state->search_range) {
vop_infor->fcode_fwd = 5;
} else if (512 > enc_state->search_range) {
vop_infor->fcode_fwd = 6;
} else {
vop_infor->fcode_fwd = 7;
}
vop_infor->ref_point.x = 0;
vop_infor->ref_point.y = 0;
vop_infor->cur_point.x = 0;
vop_infor->cur_point.y = 0;
/* init buffer ptrs: position the 1st ref MB in ref VOP plane */
vop_infor->fwd_ref_mb.y_ptr = enc_state->fwd_ref_frame.y_ptr;
vop_infor->fwd_ref_mb.cb_ptr = enc_state->fwd_ref_frame.cb_ptr;
vop_infor->fwd_ref_mb.cr_ptr = enc_state->fwd_ref_frame.cr_ptr;
vop_infor->fwd_ref_rec_mb.y_ptr = enc_state->fwd_ref_rec_frame.y_ptr;
vop_infor->fwd_ref_rec_mb.cb_ptr = enc_state->fwd_ref_rec_frame.cb_ptr;
vop_infor->fwd_ref_rec_mb.cr_ptr = enc_state->fwd_ref_rec_frame.cr_ptr;
/* init mv_buf ptr */
vop_infor->mv_buf = enc_state->mv_buf;
/* init tranp_buf ptr */
vop_infor->tranp_buf = enc_state->tranp_buf;
for (i = 0; i < (enc_state->mb_per_row + 2) * 4; i++) {
vop_infor->tranp_buf[i] = IPP_VIDEO_TRANSPARENT;
}
} else if (IVOP == enc_state->vop_coding_type) {
/* tranp_buf and mv_buf are not used in ivop */
vop_infor->mv_buf = NULL;
vop_infor->tranp_buf = NULL;
}
return SAMPLE_STATUS_NOERR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -