yuvcreate.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include <stdint.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <SDL.h>
  6. #include <unistd.h>
  7. int main (int argc, char **argv)
  8. {
  9.   FILE *yuvfile;
  10.   uint8_t *ybuf, *ubuf, *vbuf, *temp;
  11.   size_t height = 240, width = 320, ysize, uvsize;
  12.   char yval, uval, vval;
  13.   argc--;
  14.   argv++;
  15.   if (argc != 5) 
  16.     return(0);
  17.   ysize = width*height;
  18.   uvsize = ysize / 4;
  19.   yuvfile = fopen(*argv, "w");
  20.   argv++;
  21.   int frames = atoi(*argv);
  22.   yval = atoi(*argv);
  23.   uval = atoi(*argv);
  24.   vval = atoi(*argv);
  25.   printf("Y %x not %x", yval, ~yval);
  26.   ybuf = (uint8_t *)malloc(ysize);
  27.   temp = ybuf;
  28.   for (size_t ix = 0; ix < height; ix++) {
  29.     memset(temp, yval, width / 2);
  30.     memset(temp + (width/2), ~yval, width / 2);
  31.     temp += width;
  32.     if (ix == height / 2) yval = ~yval;
  33.   }
  34.   ubuf = (uint8_t *)malloc(ysize);
  35.   temp = ubuf;
  36.   for (size_t ix = 0; ix < height/2; ix++) {
  37.     memset(temp, uval, width / 4);
  38.     memset(temp + (width/4), ~uval, width / 4);
  39.     if (ix == height / 4) uval = ~uval;
  40.     temp += width/2;
  41.   }
  42.     
  43.   vbuf = (uint8_t *)malloc(ysize);
  44.   temp = vbuf;
  45.   for (size_t ix = 0; ix < height/2; ix++) {
  46.     memset(temp, vval, width / 4);
  47.     memset(temp + (width/4), ~vval, width / 4);
  48.     if (ix == height / 4) vval = ~vval;
  49.     temp += width/2;
  50.   }
  51.   for (int ix = 0; ix < frames; ix++) {
  52.     fwrite(ybuf, ysize, sizeof(uint8_t), yuvfile);
  53.     fwrite(ubuf, uvsize, sizeof(uint8_t), yuvfile);
  54.     fwrite(vbuf, uvsize, sizeof(uint8_t), yuvfile);
  55.   }
  56.   
  57.   fclose(yuvfile);
  58. }