- av_log(opengl, AV_LOG_DEBUG, "OpenGL version: %s\n", version);
+ av_log(h, AV_LOG_DEBUG, "OpenGL version: %s\n", version);
sscanf(version, "%d.%d", &major, &minor);
for (i = 0; required_extensions[i].extension; i++) {
if (major < required_extensions[i].major &&
(major == required_extensions[i].major && minor < required_extensions[i].minor) &&
!strstr(extensions, required_extensions[i].extension)) {
sscanf(version, "%d.%d", &major, &minor);
for (i = 0; required_extensions[i].extension; i++) {
if (major < required_extensions[i].major &&
(major == required_extensions[i].major && minor < required_extensions[i].minor) &&
!strstr(extensions, required_extensions[i].extension)) {
- av_log(opengl, AV_LOG_ERROR, "Required extension %s is not supported.\n",
+ av_log(h, AV_LOG_ERROR, "Required extension %s is not supported.\n",
- av_log(opengl, AV_LOG_DEBUG, "Supported extensions are: %s\n", extensions);
+ av_log(h, AV_LOG_DEBUG, "Supported extensions are: %s\n", extensions);
- av_log(opengl, AV_LOG_DEBUG, "Non Power of 2 textures support: %s\n", opengl->non_pow_2_textures ? "Yes" : "No");
- av_log(opengl, AV_LOG_DEBUG, "Unpack Subimage extension support: %s\n", opengl->unpack_subimage ? "Yes" : "No");
- av_log(opengl, AV_LOG_DEBUG, "Max texture size: %dx%d\n", opengl->max_texture_size, opengl->max_texture_size);
- av_log(opengl, AV_LOG_DEBUG, "Max viewport size: %dx%d\n",
+ av_log(h, AV_LOG_DEBUG, "Non Power of 2 textures support: %s\n", opengl->non_pow_2_textures ? "Yes" : "No");
+ av_log(h, AV_LOG_DEBUG, "Unpack Subimage extension support: %s\n", opengl->unpack_subimage ? "Yes" : "No");
+ av_log(h, AV_LOG_DEBUG, "Max texture size: %dx%d\n", opengl->max_texture_size, opengl->max_texture_size);
+ av_log(h, AV_LOG_DEBUG, "Max viewport size: %dx%d\n",
opengl->max_viewport_width, opengl->max_viewport_height);
OPENGL_ERROR_CHECK(opengl);
opengl->max_viewport_width, opengl->max_viewport_height);
OPENGL_ERROR_CHECK(opengl);
- h->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO ||
- h->streams[0]->codecpar->codec_id != AV_CODEC_ID_RAWVIDEO) {
- av_log(opengl, AV_LOG_ERROR, "Only a single video stream is supported.\n");
+ par->codec_type != AVMEDIA_TYPE_VIDEO ||
+ (par->codec_id != AV_CODEC_ID_WRAPPED_AVFRAME && par->codec_id != AV_CODEC_ID_RAWVIDEO)) {
+ av_log(opengl, AV_LOG_ERROR, "Only a single raw or wrapped avframe video stream is supported.\n");
- return opengl_draw(h, pkt, 0, 1);
+ AVCodecParameters *par = h->streams[0]->codecpar;
+ if (par->codec_id == AV_CODEC_ID_WRAPPED_AVFRAME) {
+ AVFrame *frame = (AVFrame *)pkt->data;
+ return opengl_draw(h, frame, 0, 0);
+ } else {
+ return opengl_draw(h, pkt, 0, 1);
+ }
#define OFFSET(x) offsetof(OpenGLContext, x)
#define ENC AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
#define OFFSET(x) offsetof(OpenGLContext, x)
#define ENC AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
- { "background", "set background color", OFFSET(background), AV_OPT_TYPE_COLOR, {.str = "black"}, CHAR_MIN, CHAR_MAX, ENC },
+ { "background", "set background color", OFFSET(background), AV_OPT_TYPE_COLOR, {.str = "black"}, 0, 0, ENC },
{ "no_window", "disable default window", OFFSET(no_window), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, ENC },
{ "window_title", "set window title", OFFSET(window_title), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, ENC },
{ "window_size", "set window size", OFFSET(window_width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, ENC },
{ "no_window", "disable default window", OFFSET(no_window), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, ENC },
{ "window_title", "set window title", OFFSET(window_title), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, ENC },
{ "window_size", "set window size", OFFSET(window_width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, ENC },
.long_name = NULL_IF_CONFIG_SMALL("OpenGL output"),
.priv_data_size = sizeof(OpenGLContext),
.audio_codec = AV_CODEC_ID_NONE,
.long_name = NULL_IF_CONFIG_SMALL("OpenGL output"),
.priv_data_size = sizeof(OpenGLContext),
.audio_codec = AV_CODEC_ID_NONE,
.write_header = opengl_write_header,
.write_packet = opengl_write_packet,
.write_uncoded_frame = opengl_write_frame,
.write_header = opengl_write_header,
.write_packet = opengl_write_packet,
.write_uncoded_frame = opengl_write_frame,