⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initial.c

📁 DM642的mpeg4编码
💻 C
字号:
#include "initial.h"

short InitialEncoder(Encoder* pEncoder)
{
     int iSize; 

	 short iMBWidth, iMBHeight;

	 short iWidth, iHeight;

	 short iExtWidth, iExtHeight;

	 short iExtWidthHalf;

     iWidth  = pEncoder->iWidth;
     iHeight = pEncoder->iHeight;

	 iExtWidth = iWidth + 2 * IMAGE_EDGE;
	 iExtHeight = iHeight + 2 * IMAGE_EDGE;

	 iExtWidthHalf = iExtWidth/2;

     pEncoder->pForFrameInfo = &pEncoder->frameinfo[0];
	 pEncoder->pCurFrameInfo = &pEncoder->frameinfo[1];

	 pEncoder->pVol = &pEncoder->vol;

	 iSize = iWidth * iHeight + iWidth * iHeight/2;	 

	 iSize = iExtWidth * iExtHeight;


	 //临时数据空间******************************************************
		  pEncoder->pForImage8 = &pEncoder->image8[0];
		  pEncoder->pCurImage8 = &pEncoder->image8[1];

		   pEncoder->pCurImage8->Y = malloc(sizeof(unsigned char ) * iSize);
			pEncoder->pCurImage8->Cb = malloc(sizeof(unsigned char) * iSize/4);
			pEncoder->pCurImage8->Cr = malloc(sizeof(unsigned char) * iSize/4);
			if (pEncoder->pCurImage8->Y == NULL || pEncoder->pCurImage8->Cb == NULL || pEncoder->pCurImage8->Cr == NULL)
			{
				printf("pEncoder->pCurImage8 Memory Allocate Error!\n");
				exit(-1);
			}
			//将扩边前
			pEncoder->pCurImage8->Y += IMAGE_EDGE * iExtWidth + IMAGE_EDGE;
			pEncoder->pCurImage8->Cb += IMAGE_EDGE_HALF * iExtWidthHalf + IMAGE_EDGE_HALF;
			pEncoder->pCurImage8->Cr += IMAGE_EDGE_HALF * iExtWidthHalf + IMAGE_EDGE_HALF;

			pEncoder->pForImage8->Y = malloc(sizeof(unsigned char) * iSize);
			pEncoder->pForImage8->Cb = malloc(sizeof(unsigned char) * iSize/4);
			pEncoder->pForImage8->Cr = malloc(sizeof(unsigned char) * iSize/4);
			if (pEncoder->pForImage8->Y == NULL || pEncoder->pForImage8->Cb == NULL || pEncoder->pForImage8->Cr == NULL)
			{
				printf("pEncoder->pForImage8 Memory Allocate Error!\n");
				exit(-1);
			}
			pEncoder->pForImage8->Y += IMAGE_EDGE * iExtWidth + IMAGE_EDGE;
			pEncoder->pForImage8->Cb += IMAGE_EDGE_HALF * iExtWidthHalf + IMAGE_EDGE_HALF;
			pEncoder->pForImage8->Cr += IMAGE_EDGE_HALF * iExtWidthHalf + IMAGE_EDGE_HALF;

     iMBWidth = iWidth / 16;
	 iMBHeight = iHeight / 16;
	 iSize = iMBWidth * iMBHeight;

	 pEncoder->pCurFrameInfo->pMB = (MacroBlock*)malloc(sizeof(MacroBlock)* iSize);
	 if (pEncoder->pCurFrameInfo->pMB == NULL)
	 {
        printf("pEncoder->pCurFrameInfo->pMB Memory Allocate Error!\n");
		exit(-1);
	 }
     pEncoder->pForFrameInfo->pMB = (MacroBlock*)malloc(sizeof(MacroBlock)* iSize);
	 if (pEncoder->pForFrameInfo->pMB == NULL)
	 {
        printf("pEncoder->pForFrameInfo->pMB Memory Allocate Error!\n");
		exit(-1);
	 }

	

	 /* initial encoder information  */
     pEncoder->iFrameNo = 0;
   
	 pEncoder->pVol->profile_and_level_indication = 1;
	 pEncoder->pVol->is_visual_object_identifier = 0;
	 pEncoder->pVol->visual_object_verid = 0;
	 pEncoder->pVol->visual_object_priority = 0; 
	 pEncoder->pVol->visual_object_type = Visual_Object_Type_Video;
	 pEncoder->pVol->random_accessible_vol = 0;

	 pEncoder->pVol->video_object_type_indication = 1;
	 pEncoder->pVol->is_object_layer_identifier = 0;
	 pEncoder->pVol->video_object_layer_verid = 1;
	 pEncoder->pVol->video_object_layer_priority = 0;

	 pEncoder->pVol->aspect_ratio_info = 1;
//	 pEncoder->pVol->par_width = 
//	 pEncoder->pVol->par_height = 

	 pEncoder->pVol->vol_control_parameters = 1;
	 pEncoder->pVol->chroma_format = 1;
	 pEncoder->pVol->low_delay = 1;

	
	
	 pEncoder->pVol->vbv_parameters = 0;

//	 pEncoder->pVol->video_object_layer_shape_extension = 
	 pEncoder->pVol->vop_time_increment_resolution = pEncoder->iFrameRate;
	 pEncoder->pVol->fixed_vop_rate = 1;
	 pEncoder->pVol->fixed_vop_time_increment = 1;

     pEncoder->pVol->interlaced = 0;
     pEncoder->pVol->obmc_disable = 1;
	 pEncoder->pVol->sprite_enable = 0;

	 pEncoder->pVol->not_8_bit = 0;
	 pEncoder->pVol->quant_precion = 5;
	 pEncoder->pVol->bits_per_pixel = 8;

	 pEncoder->pVol->scalability = 0;

	 pEncoder->pVol->quant_type = 0;
	 pEncoder->pVol->load_intra_quant_mat = 0;
	 pEncoder->pVol->load_inter_quant_mat = 0;

	 pEncoder->pVol->quarter_sample = 0;
	 pEncoder->pVol->complexity_estimation_disable = 1;
	 pEncoder->pVol->resync_marker_disable =  1;
	 pEncoder->pVol->data_partitioned = 0;
	 pEncoder->pVol->reversible_vlc = 0;

	 pEncoder->pVol->video_object_layer_width = iWidth;
	 pEncoder->pVol->video_object_layer_height = iHeight;

	 pEncoder->pVol->iExtWidth = pEncoder->pVol->video_object_layer_width + 2 * IMAGE_EDGE;
	 pEncoder->pVol->iExtHeight = pEncoder->pVol->video_object_layer_height + 2 * IMAGE_EDGE;

	 /* initial time information  */
	 pEncoder->iCurEncodeTime = 0;
	 pEncoder->iLastRefEncodeTime = 0;
	 pEncoder->iNewRefDisplayTime = 0;
	 pEncoder->iNewRefDisplayTimeBase = 0;
	 pEncoder->iOldRefDisplayTime = 0;
	 pEncoder->iOldRefDisplayTimeBase = 0;

	 pEncoder->pForFrameInfo->vop_time_increment = 0;
	 
	 pEncoder->pForFrameInfo->dCurEncodeTime = 0.0;
	 pEncoder->pForFrameInfo->iCurDisplayTime = 0;
	 pEncoder->pForFrameInfo->iCurEncodeTime = 0;

	 pEncoder->pCurFrameInfo->dCurEncodeTime = 0.0;
	 pEncoder->pCurFrameInfo->iCurDisplayTime = 0;
	 pEncoder->pCurFrameInfo->iCurEncodeTime = 0;

	 return 1;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -