STORE.C
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:1k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include "mp4_vars.h"
  5. #include "debug.h"
  6. #include "store.h"
  7. /**
  8.  *
  9. **/
  10. static void store_yuv (char *name, unsigned char *src, int offset, int incr, int width, int height);
  11. static void putbyte (int c);
  12. /**/
  13. FILE * outfile;
  14. int create_flag = 1;
  15. const char mode_create[] = "wb";
  16. const char mode_open[] = "ab";
  17. /***/
  18. void storeframe (unsigned char *src[], int width, int height)
  19. {
  20. int offset = 0;
  21. int hor_size = mp4_state->horizontal_size;
  22.   store_yuv (mp4_state->outputname, src[0], offset, width, hor_size, height);
  23.   offset >>= 1;
  24.   width >>= 1;
  25.   height >>= 1;
  26. hor_size >>= 1;
  27.   store_yuv (mp4_state->outputname, src[1], offset, width, hor_size, height);
  28.   store_yuv (mp4_state->outputname, src[2], offset, width, hor_size, height);
  29. }
  30. /***/
  31. static void store_yuv (char *name, unsigned char *src, int offset, 
  32.                         int incr, int width, int height)
  33. {
  34.   int i;
  35.   unsigned char *p;
  36. const char * mode = create_flag ? mode_create : mode_open;
  37. if (create_flag)
  38. create_flag = 0;
  39.   if ((outfile = fopen (name, mode)) == NULL)
  40.   {
  41.     _Print ("Error: Couldn't append to %sn", name);
  42.     exit(0);
  43.   }
  44.   for (i = 0; i < height; i++)
  45.   {
  46.     p = src + offset + incr * i;
  47. fwrite(p, width, 1, outfile);
  48.   }
  49.   fclose (outfile);
  50. }