?? mfsdecord.c
字號(hào):
#include <stdio.h>
#include <stdlib.h>
FILE *ipread;
FILE *ipwrite0;
int count=0;
int filesize(FILE *filename)
{
//Give the size of the file.
int length=0;
if(ipread==NULL)
{
return -1;
}
fseek(ipread, 0L, SEEK_END);
length = ftell(ipread);
fclose(ipread);
return length;
}
int Framesize(FILE *filename)
{
//Give the number of Frame in this file.
char a[4];
unsigned char b[4];//must be unsigned or wrong
int i=0;
fread(a,1,4,ipread);
if(a[0]==0x0&&a[1]==0x0&&a[2]==0x0&&a[3]==0x1)
i++;
else
return -1;
while(!feof(ipread))
{
fread(b,1,4,ipread);
fread(a,1,4,ipread);
if(a[0]==0x0&&a[1]==0x0&&a[2]==0x0&&a[3]==0x1&&b[0]==0xFF&&b[1]==0xFF&&b[2]==0xFF&&b[3]==0xFF)
i++;
}
return i;
fclose(ipread);
}
void filecopy(FILE *ifp, FILE *ofp,int length )
{
char a[1];
int i=0;
while(i<length)
{
fread(a,1,1,ifp);
fwrite(a,1,1,ofp);
i++;
}
return;
}
void videofind(FILE *filename)
{
unsigned char a[4];
unsigned char b[4];
unsigned char length_of_head[1];
unsigned int length_Of_head;
unsigned long int length_of_subsonframe[1];
unsigned char d[3];
unsigned int d0,d1,d2,d3;
unsigned long int length_Of_subsonframe;
unsigned char length_of_subsonhead[1];
unsigned int length_Of_subsonhead;
unsigned int length_of_videohead[1];
unsigned int length_Of_videohead;
unsigned int length_of_video[1];
unsigned int length_Of_video;
unsigned int videounit_num;
unsigned int i;
unsigned short int length_of_videounit[50];
unsigned char videostream_num[50];
long int temp;
unsigned int purevideo_length;
unsigned char temp_copy[1];
int temp_i=0;
unsigned char test_do1[1];
unsigned char test_do2[1];
fread(a,1,4,ipread);
if(a[0]==0x0&&a[1]==0x0&&a[2]==0x0&&a[3]==0x1)
{
fread(length_of_head,1,1,ipread);
length_Of_head=length_of_head[0];
printf("length_Of_head=%d\n",length_Of_head);
fseek(ipread,11L,SEEK_SET);
fread(test_do1,1,1,ipread);//確定復(fù)用子幀數(shù)目
test_do1[0]=test_do1[0]&0x0f;//確定復(fù)用子幀數(shù)目
fseek(ipread,12L,SEEK_SET);//復(fù)用子幀數(shù)目為1,讀取復(fù)用子幀1的長(zhǎng)度 3個(gè)字節(jié)
fread(d,3,1,ipread);//小印第安序
d1=d[0];
d2=d[1];
d3=d[2];
d1=(d1<<16)&0x00FF0000;
d2=(d2<<8)&0x0000FF00;
d3=d3&0x000000FF;
d0=(0x00|d3|d2|d1);
length_Of_subsonframe=d0;
printf("length_Of_subsonframe=%d\n",length_Of_subsonframe);
fseek(ipread,length_Of_head+4L,SEEK_SET);//指向復(fù)用子幀頭
fread(length_of_subsonhead,1,1,ipread);
length_Of_subsonhead=length_of_subsonhead[0];
printf("length_Of_subsonhead=%d\n",length_Of_subsonhead);
fseek(ipread,5L,SEEK_CUR);
fread(d,3,1,ipread);
d1=d[0];
d2=d[1];
d3=d[2];
d1=(d1<<16)&0x00FF0000;
d2=(d2<<8)&0x0000FF00;
d3=d3&0x000000FF;
d0=(0x00|d3|d2|d1);
d0=d0>>3;
d0=d0&0x001fffff;
test_do2[0]=d[2];
test_do2[0]=test_do2[0]&0x07;//確定視頻流總數(shù)
length_Of_video=d0;
printf("length_of_video=%d\n",length_Of_video);
fseek(ipread,length_Of_head+4L+length_Of_subsonhead+4L,SEEK_SET);//指向視頻段頭
fread(d,2,1,ipread);
d1=d[0];
printf("d[0]=%d\n",d[0]);
d2=d[1];
printf("d[1]=%d\n",d[1]);
d1=(d1<<8)&0x0000FF00;
d2=d2&0x000000FF;
d0=(0x00|0x00|d2|d1);
d0=d0>>4;
d0=d0&0x00000FFF;
length_Of_videohead=d0;
printf("length_Of_videohead=%d\n",length_Of_videohead);
purevideo_length=length_Of_video-length_Of_videohead-4;
printf("purevideo_length=%d\n",purevideo_length);
fseek(ipread,length_Of_head+4L+length_Of_subsonhead+4L+length_Of_videohead+4L,SEEK_SET);//指向視頻單元開(kāi)頭
if(test_do1[0]==1&&test_do2[0]==1)
{
filecopy(ipread,ipwrite0,purevideo_length);
}
else
{
;
}
fseek(ipread,4L,SEEK_SET);
}
else
return;
while(!feof(ipread))
{
fread(b,1,4,ipread);
fread(a,1,4,ipread);
if(a[0]==0x0&&a[1]==0x0&&a[2]==0x0&&a[3]==0x1&&b[0]==0xFF&&b[1]==0xFF&&b[2]==0xFF&&b[3]==0xFF)
{
temp=ftell(ipread);
fread(length_of_head,1,1,ipread);
length_Of_head=length_of_head[0];
printf("length_Of_head=%d\n",length_Of_head);
fseek(ipread,11L+temp-4L,SEEK_SET);
fread(test_do1,1,1,ipread);//確定復(fù)用子幀數(shù)目
test_do1[0]=test_do1[0]&0x0f;//確定復(fù)用子幀數(shù)目
fseek(ipread,12L+temp-4L,SEEK_SET);//復(fù)用子幀數(shù)目為1,讀取復(fù)用子幀1的長(zhǎng)度 3個(gè)字節(jié)
fread(d,3,1,ipread);
d1=d[0];
d2=d[1];
d3=d[2];
d1=(d1<<16)&0x00FF0000;
d2=(d2<<8)&0x0000FF00;
d3=d3&0x000000FF;
d0=(0x00|d3|d2|d1);
length_Of_subsonframe=d0;
printf("length_Of_subsonframe=%d\n",length_Of_subsonframe);
fseek(ipread,length_Of_head+4L+temp-4L,SEEK_SET);//指向復(fù)用子幀頭
fread(length_of_subsonhead,1,1,ipread);
length_Of_subsonhead=length_of_subsonhead[0];
printf("length_Of_subsonhead=%d\n",length_Of_subsonhead);
fseek(ipread,5L,SEEK_CUR);
fread(d,3,1,ipread);
d1=d[0];
d2=d[1];
d3=d[2];
d1=(d1<<16)&0x00FF0000;
d2=(d2<<8)&0x0000FF00;
d3=d3&0x000000FF;
d0=(0x00|d3|d2|d1);
d0=d0>>3;
d0=d0&0x001fffff;
test_do2[0]=d[2];
test_do2[0]=test_do2[0]&0x07;//確定視頻流總數(shù)
length_Of_video=d0;
printf("length_of_video=%d\n",length_Of_video);
fseek(ipread,length_Of_head+4L+length_Of_subsonhead+4L+temp-4L,SEEK_SET);//指向視頻段頭
fread(d,2,1,ipread);
d1=d[0];
printf("d[0]=%d\n",d[0]);
d2=d[1];
printf("d[1]=%d\n",d[1]);
d1=(d1<<8)&0x0000FF00;
d2=d2&0x000000FF;
d0=(0x00|0x00|d2|d1);
d0=d0>>4;
d0=d0&0x00000FFF;
length_Of_videohead=d0;
printf("length_Of_videohead=%d\n",length_Of_videohead);
purevideo_length=length_Of_video-length_Of_videohead-4;
printf("purevideo_length=%d\n",purevideo_length);
fseek(ipread,length_Of_head+4L+length_Of_subsonhead+4L+length_Of_videohead+4L+temp-4L,SEEK_SET);
if(test_do1[0]==1&&test_do2[0]==1)
{
filecopy(ipread,ipwrite0,purevideo_length);
}
else
{
;
}
fseek(ipread,temp,SEEK_SET);
}
}
return;
}
int main()
{
int File_Size=0;
int Frame_Size=0;
ipread = fopen("D:/mydesign/MFS_Decorder/CCTV-3 12-09_1410.mfs","rb");
ipwrite0 = fopen("D:/mydesign/MFS_Decorder/myfile_out0.txt","wb");
File_Size=filesize(ipread);//give the filesize.
printf("filesize=%d\n",File_Size);//print filesize.
ipread = fopen("D:/mydesign/MFS_Decorder/CCTV-3 12-09_1410.mfs","rb");//open file for the file had been closed in fuc filesize.
Frame_Size=Framesize(ipread);
printf("Framsize=%d\n",Frame_Size);
ipread = fopen("D:/mydesign/MFS_Decorder/CCTV-3 12-09_1410.mfs","rb");
videofind(ipread);
fclose(ipread);
fclose(ipwrite0);
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -