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

流媒体/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;
  12. int recfile;
  13. int main(int argc, char *argv[])
  14. {
  15.   char pname1[80], pname2[80], buff1[480], buff2[480];
  16.   unsigned long cnt, write1;
  17.   int size, codec, len;
  18.   if(argc<4)
  19.   {
  20.     printf("Use:  %s <ixj dev number> <filename> <codec number>n",argv[0]);
  21.     printf("      example:  %s 0 audio-file 3n",argv[0]);
  22.     exit(0);
  23.   }
  24.   sprintf(pname1, "/dev/ixj%s", argv[1]);
  25.   sprintf(pname2, "%s", argv[2]);
  26.   printf("Reading from %s, Writing to %sn", pname2, pname1);
  27.   
  28.   ixj1 = open(pname1, O_WRONLY);
  29.   recfile = open(pname2, O_RDONLY);
  30.   printf("file handle %dn", recfile);
  31.   atexit(closeall);
  32.   if(!ioctl(ixj1, IXJCTL_RING))
  33.   {
  34.     exit(0);
  35.   }
  36.   codec = atoi(argv[3]);
  37.   switch(codec)
  38.   {
  39.     case G723_63:
  40.       len = 24;
  41.       break;
  42.     case G723_53:
  43.       len = 20;
  44.       break;
  45.     case TS85:
  46.       len = 32;
  47.       break;
  48.     case TS48:
  49.       len = 18;
  50.       break;
  51.     case TS41:
  52.       len = 16;
  53.       break;
  54.     case G728:
  55.       len = 96;
  56.       break;
  57.     case G729:
  58.       len = 36;
  59.       break;
  60.     case ULAW:
  61.       len = 240;
  62.       break;
  63.     case ALAW:
  64.       len = 240;
  65.       break;
  66.     case LINEAR16:
  67.       len = 480;
  68.       break;
  69.     case LINEAR8:
  70.       len = 240;
  71.       break;
  72.     case WSS:
  73.       len = 240;
  74.       break;
  75.   }
  76.   cnt = write1 = 0;
  77.   ioctl(ixj1, IXJCTL_PLAY_CODEC, codec);
  78.   ioctl(ixj1, IXJCTL_PLAY_START);
  79.   while(ioctl(ixj1, IXJCTL_HOOKSTATE))
  80.   {
  81.     size = read(recfile, buff1, len);
  82.     fflush(stdout);
  83.     if(size > 0)
  84.     {
  85.       write(ixj1, buff1, size);
  86.       write1++;
  87.     }
  88.     else
  89.     {
  90.       break;
  91.     }
  92.   }
  93. }
  94. void closeall(void)
  95. {
  96.   ioctl(ixj1, IXJCTL_PLAY_STOP);
  97.   ioctl(ixj1, IXJCTL_AEC_STOP);
  98.   close(ixj1);
  99.   close(recfile);
  100. }