📄 picturei.cpp
字号:
/*!
********************************************************
*\file
* picureI.cpp
*\brief
* implementation for frame(I frame) level funcitons .
*\date
* 12/6/2002
*
********************************************************/
#include <stdio.h>
#include "HEnc.h"
#include "vlc.h"
#include "image.h"
#include "macroblock.h"
#include "bitstream.h"
// Name : EncIfrm
// Input : H263VencStatus
// Output : Encoded Intra Picture
// Description : Encode one I frame
/*! Last modified on 2002.12.5 by zj */
int EncIfrm (H263VencStatus *curr_encode_status)
{
int i, j;
INT16 mb_coeff[384]; //mb data encoded 384 = 8*8 * (4+1+1).
int COD = 0;
int CBP;
int dquant = 0;
int mb_mode = MODE_INTRA;
int frame_total_bits = 0;
int gob_nbr = 0;
int gob_quant = curr_encode_status->total_Q;
if (curr_encode_status->version2)
{
frame_total_bits += EncPicHdrPlus(curr_encode_status);
}
else
{
frame_total_bits += EncPicHdr(curr_encode_status);
}
for (i = 0; i < curr_encode_status->lines; i += 16)
{
if (curr_encode_status->advanced_intra_coding && (i == 0))
{
clear_coeff_top(curr_encode_status->rcoeff.top_lum, curr_encode_status->rcoeff.top_cb, curr_encode_status->rcoeff.top_cr);
clear_coeff_top(curr_encode_status->coeff.top_lum, curr_encode_status->coeff.top_cb, curr_encode_status->coeff.top_cr);
}
if(curr_encode_status->gobsync && i && (i/16)%(curr_encode_status->gobsync) == 0)
{
gob_nbr++;
frame_total_bits += EncGOBHdr(&(curr_encode_status->putstrmctrl), gob_nbr,curr_encode_status->gfid, gob_quant, curr_encode_status->TR, 0);
if (curr_encode_status->advanced_intra_coding)
{
clear_coeff_top(curr_encode_status->rcoeff.top_lum, curr_encode_status->rcoeff.top_cb, curr_encode_status->rcoeff.top_cr);
clear_coeff_top(curr_encode_status->coeff.top_lum, curr_encode_status->coeff.top_cb, curr_encode_status->coeff.top_cr);
}
}
for (j = 0; j < curr_encode_status->pels; j += 16)
{
if (!curr_encode_status->advanced_intra_coding)
{
CBP = MB_Encode_I (curr_encode_status, j, i, mb_coeff);
/* take down the code information of current mb */
curr_encode_status->coded_tab[i/16+1][j/16+1] = 1;
curr_encode_status->quant_tab[i/16+1][j/16+1] = curr_encode_status->total_Q;
frame_total_bits += EncMBHdr(&(curr_encode_status->putstrmctrl), curr_encode_status->PTYPE, mb_mode, COD, CBP, dquant);
frame_total_bits += EncCoeff(&(curr_encode_status->putstrmctrl), 1, CBP, mb_coeff, 64);
}
else
{
if (0 == j)
{
clear_coeff_left(curr_encode_status->rcoeff.left_lum, curr_encode_status->rcoeff.left_cr, curr_encode_status->rcoeff.left_cb);
clear_coeff_left(curr_encode_status->coeff.left_lum, curr_encode_status->coeff.left_cr, curr_encode_status->coeff.left_cb);
}
CBP = MB_Encode_AI(curr_encode_status, j, i, mb_coeff);
curr_encode_status->coded_tab[i/16+1][j/16+1] = 1;
curr_encode_status->quant_tab[i/16+1][j/16+1] = curr_encode_status->total_Q;
frame_total_bits += EncMBHdr(&(curr_encode_status->putstrmctrl), curr_encode_status->PTYPE, mb_mode, COD, CBP, dquant);
frame_total_bits += EncCoeff(&(curr_encode_status->putstrmctrl), 2, CBP, mb_coeff, 64);
}
}
}
frame_total_bits += alignbits(&(curr_encode_status->putstrmctrl));
clear_buff(&(curr_encode_status->putstrmctrl));
if (curr_encode_status->filter)
{
EdgeFilter(curr_encode_status);
}
if (curr_encode_status->mv_outside_frame)
{
MakeEdgeImage(curr_encode_status);
}
return frame_total_bits;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -