Changeset 6149 in orxonox.OLD for branches/avi_play/src/lib/graphics/importer/media_container.cc
- Timestamp:
- Dec 17, 2005, 4:32:29 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/avi_play/src/lib/graphics/importer/media_container.cc
r6127 r6149 52 52 MediaContainer::~MediaContainer() 53 53 { 54 54 55 // Free the RGB image 55 56 delete [] buffer; … … 72 73 } 73 74 74 GLuintMediaContainer::getNextFrame()75 SDL_Surface * MediaContainer::getNextFrame() 75 76 { 76 77 /* get next frame */ … … 91 92 PRINTF(1)("frame_number: %i\n", codec_context->frame_number); 92 93 93 // Convert the image from its native format to RGB 94 // Conversion from YUV to RGB 95 // Most codecs return images in YUV 420 format 96 // (one luminance and two chrominance channels, with the chrominance 97 // channels samples at half the spatial resolution of the luminance channel) 94 98 img_convert((AVPicture*)RGB_frame, PIX_FMT_RGB24, (AVPicture*)frame, codec_context->pix_fmt, 95 99 codec_context->width, codec_context->height); … … 101 105 data = new uint8_t[codec_context->width*codec_context->height*3*sizeof(uint8_t)]; 102 106 for(int i = 0; i < codec_context->height; i++) 103 memcpy(&data[i*codec_context->width*3], 104 picture->data[0]+i * picture->linesize[0],codec_context->width*sizeof(uint8_t)*3); 105 106 107 glGenTextures(1, &texture); 107 memcpy(&data[i*codec_context->width*3], picture->data[0]+i * picture->linesize[0],codec_context->width*sizeof(uint8_t)*3); 108 109 Uint32 rmask, gmask, bmask, amask; 110 111 /* SDL interprets each pixel as a 32-bit number, so our masks must depend 112 on the endianness (byte order) of the machine */ 113 #if SDL_BYTEORDER == SDL_BIG_ENDIAN 114 rmask = 0xff000000; 115 gmask = 0x00ff0000; 116 bmask = 0x0000ff00; 117 amask = 0x000000ff; 118 #else 119 rmask = 0x000000ff; 120 gmask = 0x0000ff00; 121 bmask = 0x00ff0000; 122 amask = 0xff000000; 123 #endif 124 surface = SDL_CreateRGBSurfaceFrom(data, codec_context->width, codec_context->height, 125 32, codec_context->width*sizeof(uint8_t)*3, rmask, gmask, bmask, 0); 126 127 return surface; 128 /*glGenTextures(1, &texture); 108 129 glBindTexture(GL_TEXTURE_2D, texture); 109 130 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); … … 113 134 //{ 114 135 // build the texture 115 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, codec_context->width, codec_context->height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);136 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, codec_context->width, codec_context->height, 0, GL_RGB, GL_UNSIGNED_BYTE, picture->data); 116 137 //} 117 138 // if its not the first use glTexSubImage2D <-- faster then creating always a new texture … … 120 141 121 142 122 glBindTexture(GL_TEXTURE_2D, 0); 143 glBindTexture(GL_TEXTURE_2D, 0);*/ 123 144 ////////////////////////////////////////////// 124 145 ///////////////////////////////////////////// … … 127 148 //this->saveCurrentFrame(); 128 149 129 return texture;150 //return texture; 130 151 } 131 152 } … … 285 306 PRINTF(1)("========================\n"); 286 307 } 287 288 289 //pts = av_q2d(is->video_st->time_base)*pkt->dts;290 //pkt = packet291 //avstrream = viedo_st292 //pts = double
Note: See TracChangeset
for help on using the changeset viewer.