📄 fooserver.c
字号:
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "myrdwr.h"
#define YUV_Size 1440*576
#define CIF 1
#define CIF_YSize 352*288
#define CIF_CbSize 176*144
#define CIF_CrSize 176*144
/*********************************************************************************************
ITU656 4:2:2
0 1 2 3 4 5 6 7 8 9 10 1439
* * * * * * *
0 Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y
1 Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y
. * *
287 Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y Field 1 End
.
.
575 Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y Field 2 End
SIF Y=360*288 U=180*144 V=180*144
the '*'s in up views are the SIF datas coming from ITU656 datas;
***********************************************************************************************/
#define SOCKADDR struct sockaddr
void initbuf(char *,unsigned long);
int
main(int argc,char ** argv)
{
int listenfd,
echofd;
struct sockaddr_in sockaddr_echo,
sockaddr_cli;
char * sendbuf,*YUV_buf,* Y_buf,* Cb_buf,* Cr_buf;
int socklen,sbufsize;
YUV_buf=(char *)malloc(sizeof(char)*YUV_Size);
#ifdef CIF
Y_buf=(char *)malloc(sizeof(char)*CIF_YSize);
Cr_buf=(char *)malloc(sizeof(char)*CIF_CbSize);
Cb_buf=(char *)malloc(sizeof(char)*CIF_CrSize);
#endif
initbuf(Y_buf,YUV_Size);
sbufsize=ITU656_SIF(YUV_buf,Y_buf,Cb_buf,Cr_buf);
sendbuf=(char *)malloc(sizeof(char)*sbufsize);
listenfd=socket(AF_INET,SOCK_STREAM,0);
if(listenfd<0){
fprintf(stderr,"socket create error!\n");
exit(1);
}
memset(&sockaddr_echo,0,sizeof(struct sockaddr_in));
sockaddr_echo.sin_family=AF_INET;
sockaddr_echo.sin_port=htons(7);
sockaddr_echo.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr*)&sockaddr_echo,sizeof(struct sockaddr_in))<0){
printf("bind error!\n");
exit(2);
}
listen(listenfd,5);
socklen=sizeof(SOCKADDR);
for( ; ; ){
echofd=accept(listenfd,(SOCKADDR *)(&sockaddr_cli),&socklen);
printf("Connect come from %s %d\n",
inet_ntoa(sockaddr_cli.sin_addr),ntohs(sockaddr_cli.sin_port));
/* while((n=read(echofd,recmsg,BUFLEN))>0){
recmsg[n]=0;
printf("client sent:%s",recmsg);
write(echofd,recmsg,n);
}
*/
n=writen(echofd,sendbuf,BUFLEN);
printf("write n=%d\n",n);
if(n==-1){
fprintf(stderr,"write error in server socket!\n");
exit(3);
}
printf("client %s closed!\n",inet_ntoa(sockaddr_cli.sin_addr));
}
}
void initbuf(char *buf,unsigned long len)
{
/* int i;
for(i=0;i<1440;i++)
buf[i]=i*256/1440;
*/
int i,j;
for(i=0;i<1440;i++)
for(j=0;j<576;j++)
buf[i*576+j]=i*256/1440;
}
ssize_t ITU656_SIF(char *input,char *Y,char *Cb,char * Cr)
{
int row,col;
ssize_t count=0;
for(row=0;row<288;row++)
for(col=0;col<1440;col=col+8){
/*是8的倍数的时候 提取数据*/
if(row%2==0){
/*when row is even,pick up Cb,Y,Cr;*/
Cb++=input[row*1440+col];
Y++=input[row*1440+col+1];
Cr++=input[row*1440+col+2];
Y++=inut[row*1440+col+5];
count=count+4;
}
else {
/*when row is odd,pick up Y only;*/
Y++=input[row*1440+col+1];
Y++=inut[row*1440+col+5];
count=count+2;
}
}
return count;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -