void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame)
{
FILE *pFile;
char szFilename[32];
int y;
GLuint texture;
uint8_t * pic_data = new uint8_t[height * width * 3];
uint8_t * t_data = new uint8_t[width * 3];
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture); // Create The Texture
glBindTexture(GL_TEXTURE_2D, texture);
for( y = 0; y < height; y++ )
{
memcpy(t_data, pFrame->data[0] + y * pFrame->linesize[0], width * 3);
for (int i=0; i < width * 3; i += 3)
{
float avg = t_data[i] + t_data[i+1] + t_data[i+2];
avg /= 3;
t_data[i] = avg;
t_data[i+1] = avg;
t_data[i+2] = avg;
}
memcpy(pic_data + y * width * 3, t_data, width * 3);
}
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pic_data);
delete t_data;
delete pic_data;
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
m_Textures.push_back(texture);
}
dm9pZCBTYXZlRnJhbWUoQVZGcmFtZSAqcEZyYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpRnJhbWUpCnsKICAgIEZJTEUgKnBGaWxlOwoJY2hhciBzekZpbGVuYW1lWzMyXTsKCWludCB5OwoJR0x1aW50IHRleHR1cmU7Cgl1aW50OF90ICogcGljX2RhdGEgPSBuZXcgdWludDhfdFtoZWlnaHQgKiB3aWR0aCAqIDNdOwoJdWludDhfdCAqIHRfZGF0YSA9IG5ldyB1aW50OF90W3dpZHRoICogM107CglnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKCWdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwkJCQkJLy8gQ3JlYXRlIFRoZSBUZXh0dXJlCiAJZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKCQoJZm9yKCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrICkKCXsJCgkJbWVtY3B5KHRfZGF0YSwgcEZyYW1lLT5kYXRhWzBdICsgeSAqIHBGcmFtZS0+bGluZXNpemVbMF0sIHdpZHRoICogMyk7CgkJZm9yIChpbnQgaT0wOyBpIDwgd2lkdGggKiAzOyBpICs9IDMpCgkJewoJCQlmbG9hdCBhdmcgPSB0X2RhdGFbaV0gKyB0X2RhdGFbaSsxXSArIHRfZGF0YVtpKzJdOwoJCQlhdmcgLz0gMzsKCQkJdF9kYXRhW2ldID0gYXZnOwoJCQl0X2RhdGFbaSsxXSA9IGF2ZzsKCQkJdF9kYXRhW2krMl0gPSBhdmc7CgkJfQoJCW1lbWNweShwaWNfZGF0YSArIHkgKiB3aWR0aCAqIDMsIHRfZGF0YSwgd2lkdGggKiAzKTsKCX0KIAlnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMywgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCLCBHTF9VTlNJR05FRF9CWVRFLCBwaWNfZGF0YSk7CglkZWxldGUgdF9kYXRhOwoJZGVsZXRlIHBpY19kYXRhOwogCWdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELEdMX1RFWFRVUkVfTUlOX0ZJTFRFUixHTF9MSU5FQVIpOwogCWdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELEdMX1RFWFRVUkVfTUFHX0ZJTFRFUixHTF9MSU5FQVIpOwoJbV9UZXh0dXJlcy5wdXNoX2JhY2sodGV4dHVyZSk7Cn0=