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

📄 burn.cpp

📁 It is for standalone platform executing DVD Burning function,it supports DVD+R/+RW Disc .
💻 CPP
📖 第 1 页 / 共 2 页
字号:
         udf_file.F_Lengh=(RMuint32)length;         udf_file.Attribute=0x04;         RMMemcpy(tmp_ptr+20+numofItems*60,&udf_file,60);         if ((udf_file.F_Lengh)%2048==0)         {               itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               global_blks=global_blks+(udf_file.F_Lengh)/2048;          }         else         {               itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               global_blks=global_blks+(udf_file.F_Lengh)/2048+1;         }		  				//Write  ALBUM.PVM	 	  RMMemset(&udf_file,0x00,60);                 RMCopyAscii(fullpath,"/tmp/itri_tmp.txt");                 //RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath));                 RMCopyAscii(udf_file.F_name,"ALBUM.PVM");                 udf_file.FileAddr=itri_NWA;                 length=Write_ALBUM_PVM(tmp_ptr+20,numofItems+6);//FileNum);                 udf_file.F_Lengh=(RMuint32)length;                 udf_file.Attribute=0x04;                 RMMemcpy(tmp_ptr+20+(numofItems+1)*60,&udf_file,60);                 if ((udf_file.F_Lengh)%2048==0)           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               		global_blks=global_blks+(udf_file.F_Lengh)/2048;           	 }           	 else           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               		global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           	  }		  		  		  		 RMMemset(&udf_file,0x00,60);                 RMCopyAscii(fullpath,"/tmp/itri_tmp.txt");                 RMCopyAscii(udf_file.F_name,"ASSET_LIST.PVM");                  udf_file.FileAddr=itri_NWA;                 length=Write_AssetList_PVM();                 udf_file.F_Lengh=(RMuint32)length;                 udf_file.Attribute=0x04;                 RMMemcpy(tmp_ptr+20+(numofItems+2)*60,&udf_file,60);                if ((udf_file.F_Lengh)%2048==0)           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               		global_blks=global_blks+(udf_file.F_Lengh)/2048;           	 }           	 else           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               		global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           	  }          	 		 		 //Write_PASS_PICTURES.PVM ICB=37		  RMMemset(&udf_file,0x00,60);                 RMCopyAscii(fullpath,"/tmp/itri_tmp.txt");                 RMCopyAscii(udf_file.F_name,"PASS_PICTURES.PVM");                  udf_file.FileAddr=itri_NWA;                 length=Write_Pictures_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM(                 udf_file.F_Lengh=(RMuint32)length;                 udf_file.Attribute=0x04;                 RMMemcpy(tmp_ptr+20+(numofItems+3)*60,&udf_file,60);                                 if ((udf_file.F_Lengh)%2048==0)           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               		global_blks=global_blks+(udf_file.F_Lengh)/2048;           	 }           	 else           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               		global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           	  }		  		 		 //Write_PASS_AUDIO.PVM    ICB=38		  RMMemset(&udf_file,0x00,60);                 RMCopyAscii(fullpath,"/tmp/itri_tmp.txt");                // RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath));                 RMCopyAscii(udf_file.F_name,"PASS_AUDIO.PVM");                  udf_file.FileAddr=itri_NWA;                 length=Write_Audio_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM(                 udf_file.F_Lengh=(RMuint32)length;                 udf_file.Attribute=0x04;                 RMMemcpy(tmp_ptr+20+(numofItems+4)*60,&udf_file,60);                 if ((udf_file.F_Lengh)%2048==0)           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               		global_blks=global_blks+(udf_file.F_Lengh)/2048;           	 }           	 else           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               		global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           	  }		 		 		 //Write_PASS_MOVIES.PVM   ICB=39		  RMMemset(&udf_file,0x00,60);                 RMCopyAscii(fullpath,"/tmp/itri_tmp.txt");                 //RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath));                 RMCopyAscii(udf_file.F_name,"PASS_MOVIES.PVM");                  udf_file.FileAddr=itri_NWA;                 length=Write_Movies_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM(                 udf_file.F_Lengh=(RMuint32)length;                 udf_file.Attribute=0x04;                 RMMemcpy(tmp_ptr+20+(numofItems+5)*60,&udf_file,60);                 if ((udf_file.F_Lengh)%2048==0)           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;               		global_blks=global_blks+(udf_file.F_Lengh)/2048;           	 }           	 else           	 {               		itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               		global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           	  }	 		  	RMMemset(&udf_file,0x00,60);	printf("1 @@@@@@@@ Test PASS PVM NWA @@@@@@@@@@@@\n");	for (RMuint16 i=numofItems;i<numofItems+6;i++)	{		RMMemcpy(&udf_file,tmp_ptr+20+i*60,60);				printf("F_name=%s ,NWA=%ld,length=%ld \n",udf_file.F_name,udf_file.FileAddr,udf_file.F_Lengh);		}		return RM_OK;}RMstatus Type2WriteDisc(RMuint16 numofItems,RMuint8 type){	RMstatus status;	typeUdfFile udf_file;	RMbool itri_pattern=FALSE;	//RMuint32 tmp_blks;	RMuint16 i,FileNum;	RMuint8 isMultiFlag=0;	RMascii fullpath[80];	RMuint32 FileBlks,total_blk,Vol_Blocks;	RMuint8 *ptr1=NULL,*tmp_ptr=NULL;	ptr1=buf_ptr;  	tmp_ptr=CurPtr;	//struct timespec usleep_req={0,300000000};		RMMemset(ptr1,0x00,2048*6);RMMemset(tmp_ptr,0x00,2048*12);	//璩囷拷妾旓拷濮嬶拷?  itri_NWA	PrevITRINWA=0;//NextWriteAddr;	CurrentITRINWA=NextWriteAddr;	itri_NWA=NextWriteAddr+700;	//?PASS PVM 6??	FileNum=numofItems+6;	global_blks=0;	ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst;        for (i=0;i<numofItems;i++)//tmp_nwa         {            RMMemset(&udf_file,0x00,60);           RMCopyAscii(udf_file.F_name,ITRI_pnav->MyFavorfiletemp->name);           udf_file.FileAddr=itri_NWA;   //udf_file.FileAddr,udf_file.F_Lengh           udf_file.F_Lengh=(RMuint32)ITRI_pnav->MyFavorfiletemp->size;           udf_file.Attribute=type;           RMMemcpy(tmp_ptr+20+i*60,&udf_file,60);           if ((udf_file.F_Lengh)%2048==0)           {               itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048;	       FileBlks=(udf_file.F_Lengh)/2048;               //tmp_blks=tmp_blks+(udf_file.F_Lengh)/2048;	       global_blks=global_blks+(udf_file.F_Lengh)/2048;           }           else           {               itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1;               FileBlks=(udf_file.F_Lengh)/2048+1;	       global_blks=global_blks+(udf_file.F_Lengh)/2048+1;           }	   printf("++++%d File=%s ,NWA=%ld ,Length=%ld(Blks)\n",i,udf_file.F_name,udf_file.FileAddr,FileBlks);           ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next;           ITRI_pnav->MyFavorfiletemp  = ITRI_pnav->MyFavorfiletemp1;          }		WriteKODAKPVMFile(itri_pattern,tmp_ptr,numofItems);			Vol_Blocks=1299+global_blks;	total_blk=(20+ (FileNum)*60)/2048+1;	RMMemcpy(tmp_ptr,ITRI_ID,10);        RMMemcpy(tmp_ptr+10,&FileNum,2);        RMMemcpy(tmp_ptr+12,&itri_NWA,4);        RMMemcpy(tmp_ptr+16,&Vol_Blocks,4);         isMultiFlag=0x01;	UDF102_FS_Create(isMultiFlag,tmp_ptr,0);	RMMemcpy(udf_ptr+120*2048,tmp_ptr,20+ FileNum*60);	//UDF Start Addr=>  itri_NWA=NextWriteAddr;	printf("++++ Write 0~300 sectors UDF FileSystem ++++ \n");	itri_NWA=NextWriteAddr;	for (i=0;i<10;i++)	{				//ITRI_WriteCommand(RMuint8 *itri_buf,RMuint32 NWA,RMuint16 transferLen)		status=ITRI_WriteCommand(udf_ptr+61440*i,itri_NWA,30);		if (status==RM_OK)			itri_NWA+=30;			}				UDF102_File_ICB_Create(tmp_ptr);  	printf("++++ Write 300~700 UDF ICB Sectors +++++++\n");	for (i=0;i<13;i++)	{		status=ITRI_WriteCommand(udf_ptr+61440*i,itri_NWA,30);		if (status==RM_OK)			itri_NWA+=30;			}	status=ITRI_WriteCommand(udf_ptr+390*2048,itri_NWA,10);	if (status==RM_OK)	{			itri_NWA+=10;		printf("ITRI_WriteCommand() successfully\n");	}		else	{printf("ITRI_WriteCommand() FAIL\n");}		//itri_NWA=NextWriteAddr+700;//UDF102_Reserved;        //tmp_nwa=next_lba;        ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst;           for (i=0;i<numofItems;i++)//tmp_nwa           {                 	   	RMMemset(fullpath,0x00,80);RMMemset(&udf_file,0x00,60);           	RMCopyAscii(fullpath,ITRI_pnav->MyFavorfiletemp->path);           	RMAppendAscii(fullpath,ITRI_pnav->MyFavorfiletemp->name);           	RMMemcpy(&udf_file,tmp_ptr+20+i*60,60);		FileBlks= (  (udf_file.F_Lengh%2048==0)?udf_file.F_Lengh/2048:udf_file.F_Lengh/2048+1);		printf("%d Write AVP FIle:%s ,NWA=%ld ,Blks=%ld \n",i,udf_file.F_name,udf_file.FileAddr,FileBlks   );	   	WriteSingleFile(fullpath,udf_file.FileAddr,udf_file.F_Lengh);	   	ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next;           	ITRI_pnav->MyFavorfiletemp  = ITRI_pnav->MyFavorfiletemp1;            }   		WriteKODAKPVMFile2(tmp_ptr,numofItems);		CloseDisc();	return RM_OK;}RMstatus ITRI_WriteCommand(RMuint8 *itri_buf,RMuint32 NWA,RMuint16 transferLen){	RMstatus status;	struct READ_BUF_CAPA bc;	RMbool isDiscReady;	RMuint8 b3,b2,b1,b0;	RMuint32 BlankBufLen;	struct timespec usleep_req={0,300000000};	status=FVD_Write10(ITRI_context->disc,itri_buf,NWA,transferLen);	while (status!=RM_OK)			{							status = RMFDiscIsReady (ITRI_context->disc, &isDiscReady);          			while ((status!=RM_OK)||(!isDiscReady))               				status = RMFDiscIsReady (ITRI_context->disc, &isDiscReady);												FVD_ReadBufCapacity(ITRI_context->disc,(RMuint8 *)&bc,sizeof(struct READ_BUF_CAPA));    				b3=bc.BlankBufLen[0];b2=bc.BlankBufLen[1];b1=bc.BlankBufLen[2];b0=bc.BlankBufLen[3];    				BlankBufLen=b3*16777216+b2*65536+b1*256+b0;    				while (BlankBufLen<128*2048)                    		{        				RMFDiscIsReady (ITRI_context->disc, &isDiscReady);        				//FVD_SyncCache(ITRI_context->disc,0,0);         				nanosleep(&usleep_req,0);        				FVD_ReadBufCapacity(ITRI_context->disc,(RMuint8 *)&bc,sizeof(struct READ_BUF_CAPA));        				b3=bc.BlankBufLen[0];b2=bc.BlankBufLen[1];b1=bc.BlankBufLen[2];b0=bc.BlankBufLen[3];        				BlankBufLen=b3*16777216+b2*65536+b1*256+b0;                    		}    				status=FVD_Write10(ITRI_context->disc,itri_buf,NWA,transferLen);                    		//printf("@@@ Loop:%d ,retry=%ld @@@@\n",i,retry);				                   	}		printf("ITRI_WriteCommand() ENTRY \n");			return status;}RMstatus Type4WriteDisc(RMuint16 numofItems,RMuint8 type){	RMuint8 b3,b2,b1,b0;	RMuint8 itri_id[12],buf[128];	RMuint32 next_lba;	RMMemset(pattern,0x00,2048*3);	RMMemset(buf,0x00,128);	FVD_ReadTrackInfo(ITRI_context->disc,0x01,numofSessions-1,buf);        b3=buf[8];b2=buf[8];b1=buf[10];b0=buf[11];        next_lba=b3*16777216+b2*65536+b1*256+b0;        printf("Prev. Session Next Writable Address=%ld \n",next_lba);		PrevITRINWA=CurrentITRINWA;	CurrentITRINWA=NextWriteAddr;					  	RMFDiscReadSector(ITRI_context->disc,(120+PrevITRINWA),3,2048,pattern);        RMMemset(itri_id,0x00,12);        RMMemcpy(itri_id,pattern,10);        if (strcmp((char *)itri_id,ITRI_ID)==0)        {		ITRI_PatternedWriteSequence(numofItems,type);	}	else	{			ITRI_NO_PatternedWriteSequence(numofItems,type);	}		CloseDisc();			return RM_OK;}RMstatus ITRI_NO_PatternedWriteSequence(RMuint16 numofItems,RMuint8 type){	Type2WriteDisc(numofItems,type);	return RM_OK;}RMstatus ITRI_PatternedWriteSequence(RMuint16 numofItems,RMuint8 type){	RMstatus status;	RMuint16 i,PrevNum,FileNum;	RMuint8 isMultiFlag=0;	RMascii fullpath[80];	RMbool itri_pattern=TRUE;	//struct timespec usleep_req={0,300000000};	typeUdfFile udf_file;	RMuint32 Vol_Blocks,FileBlks;	RMuint8 *ptr1=NULL,*tmp_ptr=NULL;	ptr1=buf_ptr;  	tmp_ptr=CurPtr;  	RMMemset(ptr1,0x00,2048*6);RMMemset(tmp_ptr,0x00,2048*12);	RMMemcpy(&FileNum,pattern+10,2);//NextWriteAddr        //RMMemcpy(&next_lba,pattern+12,4);        RMMemcpy(&Vol_Blocks,pattern+16,4);	global_blks=Vol_Blocks;        PrevNum=FileNum-6;//        FileNum=PrevNum+numofItems+6;          //tmp_nwa=NextWriteAddr+700;//next_lba;			itri_NWA=NextWriteAddr+700;//UDF102_Reserved;	ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst;        //RMMemset(ptr1,0x00,numofItems*sizeof(typeUdfFile));        for (i=0;i<numofItems;i++)//tmp_nwa        {              	     RMMemset(&udf_file,0x00,60);	     RMCopyAscii(udf_file.F_name,ITRI_pnav->MyFavorfiletemp->name);	     udf_file.FileAddr=itri_NWA;//	     udf_file.F_Lengh=(RMuint32)ITRI_pnav->MyFavorfiletemp->size;	     (udf_file.F_Lengh%2048==0)?(itri_NWA+=(udf_file.F_Lengh/2048)):(itri_NWA+=(udf_file.F_Lengh/2048+1));	     FileBlks=((udf_file.F_Lengh%2048==0)?(udf_file.F_Lengh/2048):(udf_file.F_Lengh/2048+1));	     udf_file.Attribute=type;	     global_blks+=FileBlks;	     RMMemcpy(tmp_ptr+20+(PrevNum+i)*60,&udf_file,60);	     printf("%d th File=%s,NWA=%ld ,Length(Blks)=%ld \n",i,udf_file.F_name,udf_file.FileAddr,udf_file.F_Lengh);	     ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next;             ITRI_pnav->MyFavorfiletemp  = ITRI_pnav->MyFavorfiletemp1;             }      	 //???锟藉凡锟?锟斤拷	 RMMemcpy(tmp_ptr+20,pattern+20,PrevNum*60);    	     	 WriteKODAKPVMFile(itri_pattern,tmp_ptr,FileNum-6);           	 	 RMMemcpy(tmp_ptr,ITRI_ID,10);         RMMemcpy(tmp_ptr+10,&FileNum,2);         RMMemcpy(tmp_ptr+12,&itri_NWA,4);         RMMemcpy(tmp_ptr+16,&global_blks,4);	 isMultiFlag=0x01;	 UDF102_FS_Create(isMultiFlag,tmp_ptr,NextWriteAddr);		 RMMemcpy(udf_ptr+120*2048,tmp_ptr,20+FileNum*60);  		 //?瀵

⌨️ 快捷键说明

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