inter2.c
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <strings.h>
  5. #include <sys/ioctl.h>
  6. #include <unistd.h>
  7. #include <fcntl.h>
  8. #include <asm/errno.h>
  9. #include "ixjuser.h"
  10. void closeall(void);
  11. int ixj1, ixj2;
  12. int main(int argc, char *argv[])
  13. {
  14.   char pname1[80], pname2[80], buff1[480], buff2[480];
  15.   unsigned long cnt, write1, write2;
  16.   int size, codec, len, depth;
  17.   sprintf(pname1, "/dev/ixj%s", argv[1]);
  18.   sprintf(pname2, "/dev/ixj%s", argv[2]);
  19.   ixj1 = open(pname1, O_RDWR);
  20.   ixj2 = open(pname2, O_RDWR);
  21.   atexit(closeall);
  22.   if(!ioctl(ixj1, IXJCTL_RING))
  23.   {
  24.     exit(0);
  25.   }
  26.   if(!ioctl(ixj2, IXJCTL_RING))
  27.   {
  28.     exit(0);
  29.   }
  30.   codec = atoi(argv[3]);
  31.   switch(codec)
  32.   {
  33.     case G723_63:
  34.       len = 24;
  35.       break;
  36.     case G723_53:
  37.       len = 20;
  38.       break;
  39.     case TS85:
  40.       len = 32;
  41.       break;
  42.     case TS48:
  43.       len = 18;
  44.       break;
  45.     case TS41:
  46.       len = 16;
  47.       break;
  48.     case G728:
  49.       len = 96;
  50.       break;
  51.     case G729:
  52.       len = 36;
  53.       break;
  54.     case ULAW:
  55.       len = 240;
  56.       break;
  57.     case ALAW:
  58.       len = 240;
  59.       break;
  60.     case LINEAR16:
  61.       len = 480;
  62.       break;
  63.     case LINEAR8:
  64.       len = 240;
  65.       break;
  66.     case WSS:
  67.       len = 240;
  68.       break;
  69.   }
  70.   cnt = write1 = write2 = 0;
  71.   if(argc >= 5)
  72.   {
  73.     depth = atoi(argv[4]);
  74.     ioctl(ixj1, IXJCTL_PLAY_DEPTH, depth);
  75.     ioctl(ixj1, IXJCTL_REC_DEPTH, depth);
  76.     ioctl(ixj2, IXJCTL_PLAY_DEPTH, depth);
  77.     ioctl(ixj2, IXJCTL_REC_DEPTH, depth);
  78.   }
  79.   ioctl(ixj1, IXJCTL_PLAY_CODEC, codec);
  80.   ioctl(ixj1, IXJCTL_REC_CODEC, codec);
  81.   ioctl(ixj2, IXJCTL_PLAY_CODEC, codec);
  82.   ioctl(ixj2, IXJCTL_REC_CODEC, codec);
  83.   ioctl(ixj1, IXJCTL_PLAY_START);
  84.   ioctl(ixj2, IXJCTL_REC_START);
  85.   ioctl(ixj2, IXJCTL_PLAY_START);
  86.   ioctl(ixj1, IXJCTL_REC_START);
  87. //  for(cnt=0;cnt < 655000;cnt++)
  88.   while(ioctl(ixj1, IXJCTL_HOOKSTATE) && ioctl(ixj2, IXJCTL_HOOKSTATE))
  89.   {
  90.     if(write1 == 500)
  91.     {
  92.       ioctl(ixj1, IXJCTL_AEC_START);
  93.       ioctl(ixj2, IXJCTL_AEC_START);
  94.       printf("AEC On.n");
  95.     }
  96.     size = read(ixj1, buff1, len);
  97.     if(size > 0)
  98.     {
  99.       write(ixj2, buff1, len);
  100.       write1++;
  101.     }
  102.     size = read(ixj2, buff2, len);
  103.     if(size > 0)
  104.     {
  105.       write(ixj1, buff2, len); 
  106.       write2++;
  107.     }
  108.   }
  109. printf("Write1 = %ld, Write2 = %ldn",write1,write2);
  110. getchar();
  111. }
  112. void closeall(void)
  113. {
  114.   ioctl(ixj1, IXJCTL_REC_STOP);
  115.   ioctl(ixj1, IXJCTL_PLAY_STOP);
  116.   ioctl(ixj2, IXJCTL_REC_STOP);
  117.   ioctl(ixj2, IXJCTL_PLAY_STOP);
  118.   ioctl(ixj1, IXJCTL_AEC_STOP);
  119.   ioctl(ixj2, IXJCTL_AEC_STOP);
  120.   close(ixj1);
  121.   close(ixj2);
  122. }