home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 9 / CD_ASCQ_09_1193.iso / news / 4441 / mpegcode / doc / input.for < prev    next >
Text File  |  1993-01-01  |  2KB  |  74 lines

  1.             ----------------
  2.             | FILE FORMATS |
  3.             ----------------
  4.  
  5. PPM FORMAT
  6. ----------
  7.  
  8. To give you an idea of what a PPM file is, the following code will write
  9. one out:
  10.  
  11.     int **red, **green, **blue;
  12.  
  13.     void    WritePPM(char *fileName, int width, int height, int maxVal)
  14.     {
  15.     register int x, y;
  16.     unsigned char   r, g, b;
  17.  
  18.     fprintf(stdout, "P6\n");
  19.     fprintf(stdout, "%d %d\n", width, height);
  20.     fprintf(stdout, "%d\n", maxVal);
  21.  
  22.     for ( y = 0; y < height; y++ )
  23.         for ( x = 0; x < width; x++ )
  24.         {
  25.         r = red[x][y];  g = green[x][y];    b = blue[x][y];
  26.  
  27.         fwrite(&r, 1, 1, stdout);
  28.         fwrite(&g, 1, 1, stdout);
  29.         fwrite(&b, 1, 1, stdout);
  30.         }
  31.     }
  32.  
  33. maxVal is the maximum color value.  It must be between 0 and 255 inclusive.
  34. Generally speaking, it should be 255 always.
  35.  
  36.  
  37. YUV FORMAT
  38. ----------
  39.  
  40. You should be aware that the YUV format used in the MPEG encoder is DIFFERENT
  41. than the Abekas YUV format.  The reason for this is that in MPEG, the U and
  42. V components are subsampled 4:1.
  43.  
  44. To give you an idea of what format the YUV file must be in, the following
  45. code will read in a YUV file:
  46.  
  47.     unsigned char **y_data, **cr_data, **cb_data;
  48.  
  49.     void    ReadYUV(char *fileName, int width, int height)
  50.     {
  51.     FILE *fpointer;
  52.     register int y;
  53.  
  54.     /* should allocate memory for y_data, cr_data, cb_data here */
  55.  
  56.     fpointer = fopen(fileName, "r");
  57.  
  58.     for (y = 0; y < height; y++)            /* Y */
  59.         fread(y_data[y], 1, width, fpointer);
  60.  
  61.     for (y = 0; y < height / 2; y++)            /* U */
  62.         fread(cb_data[y], 1, width / 2, fpointer);
  63.  
  64.     for (y = 0; y < height / 2; y++)            /* V */
  65.         fread(cr_data[y], 1, width / 2, fpointer);
  66.  
  67.     fclose(fpointer);
  68.     }
  69.  
  70. There are two reasons why you'd want to use YUV files rather than PPM files:
  71.     1)  The YUV files are 50% the size of the corresponding PPM files
  72.     2)  The ENCODER will run slightly faster, since it doesn't have to
  73.         do the RGB to YUV conversion itself.
  74.