yuvdisp.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.   size_t height = 240, width = 320, ysize, uvsize;
  10.   int yval, uval, vval;
  11.   char buf[32];
  12.   argc--;
  13.   argv++;
  14.   if (SDL_Init(SDL_INIT_VIDEO) < 0 || !SDL_VideoDriverName(buf, 1)) {
  15.     printf("Could not init SDL video: %sn", SDL_GetError());
  16.   }
  17.   if (argc != 3)
  18.     return(0);
  19.   yval = atoi(*argv);
  20.   argv++;
  21.   uval = atoi(*argv);
  22.   argv++;
  23.   vval = atoi(*argv);
  24.   const SDL_VideoInfo *video_info;
  25.   int video_bpp;
  26.   video_info = SDL_GetVideoInfo();
  27.   switch (video_info->vfmt->BitsPerPixel) {
  28.   case 16:
  29.   case 32:
  30.     video_bpp = video_info->vfmt->BitsPerPixel;
  31.     break;
  32.   default:
  33.     video_bpp = 16;
  34.     break;
  35.   }
  36.   SDL_Surface *m_screen = SDL_SetVideoMode(width,
  37.    height,
  38.    video_bpp,
  39.    SDL_SWSURFACE | SDL_ASYNCBLIT);
  40.   SDL_Rect m_dstrect;
  41.   m_dstrect.x = 0;
  42.   m_dstrect.y = 0;
  43.   m_dstrect.w = m_screen->w;
  44.   m_dstrect.h = m_screen->h;
  45.   SDL_Overlay *m_image = SDL_CreateYUVOverlay(width,
  46.       height,
  47.       SDL_YV12_OVERLAY, 
  48.       m_screen);
  49.   ysize = width*height;
  50.   uvsize = ysize / 4;
  51.   SDL_LockYUVOverlay(m_image);
  52.   memset(m_image->pixels[0], yval, ysize);
  53.   memset(m_image->pixels[1], vval, uvsize);
  54.   memset(m_image->pixels[2], uval, uvsize);
  55.   SDL_DisplayYUVOverlay(m_image, &m_dstrect);
  56.   SDL_UnlockYUVOverlay(m_image);
  57.   printf("%d %d %dn", yval, uval, vval);
  58.   sleep(1);
  59.   SDL_FreeYUVOverlay(m_image);
  60.   SDL_FreeSurface(m_screen);
  61.   SDL_Quit();
  62. }