33 #define WIN32_LEAN_AND_MEAN
37 #include <OpenGL/gl3.h>
44 #if HAVE_GLXGETPROCADDRESS
75 #define FF_GL_RED_COMPONENT GL_RED
76 #elif defined(GL_LUMINANCE)
77 #define FF_GL_RED_COMPONENT GL_LUMINANCE
79 #define FF_GL_RED_COMPONENT 0x1903;
83 #define FF_GL_UNSIGNED_BYTE_3_3_2 0x8032
84 #define FF_GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
85 #define FF_GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
86 #define FF_GL_UNPACK_ROW_LENGTH 0x0CF2
89 #define FF_GL_ARRAY_BUFFER 0x8892
90 #define FF_GL_ELEMENT_ARRAY_BUFFER 0x8893
91 #define FF_GL_STATIC_DRAW 0x88E4
92 #define FF_GL_FRAGMENT_SHADER 0x8B30
93 #define FF_GL_VERTEX_SHADER 0x8B31
94 #define FF_GL_COMPILE_STATUS 0x8B81
95 #define FF_GL_LINK_STATUS 0x8B82
96 #define FF_GL_INFO_LOG_LENGTH 0x8B84
151 #define OPENGL_ERROR_CHECK(ctx) \
154 if ((err_code = glGetError()) != GL_NO_ERROR) { \
155 av_log(ctx, AV_LOG_ERROR, "OpenGL error occurred in '%s', line %d: %d\n", __FUNCTION__, __LINE__, err_code); \
178 SDL_GLContext glcontext;
352 while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT) > 0) {
353 switch (event.type) {
357 switch (event.key.keysym.sym) {
363 case SDL_WINDOWEVENT:
364 switch(event.window.event) {
365 case SDL_WINDOWEVENT_RESIZED:
366 case SDL_WINDOWEVENT_SIZE_CHANGED:
367 SDL_GL_GetDrawableSize(opengl->window, &
message.width, &
message.height);
381 if (SDL_Init(SDL_INIT_VIDEO)) {
386 SDL_WINDOWPOS_UNDEFINED,
387 SDL_WINDOWPOS_UNDEFINED,
389 SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
390 if (!opengl->window) {
391 av_log(opengl,
AV_LOG_ERROR,
"Unable to create default window: %s\n", SDL_GetError());
394 opengl->glcontext = SDL_GL_CreateContext(opengl->window);
395 if (!opengl->glcontext) {
396 av_log(opengl,
AV_LOG_ERROR,
"Unable to create OpenGL context on default window: %s\n", SDL_GetError());
399 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
400 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
401 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
402 SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
403 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
405 SDL_GL_GetDrawableSize(opengl->window, &
message.width, &
message.height);
413 #define LOAD_OPENGL_FUN(name, type) \
414 procs->name = (type)SDL_GL_GetProcAddress(#name); \
415 if (!procs->name) { \
416 av_log(opengl, AV_LOG_ERROR, "Cannot load OpenGL function: '%s'\n", #name); \
417 return AVERROR(ENOSYS); \
448 #undef LOAD_OPENGL_FUN
452 #if defined(__APPLE__)
459 return opengl_sdl_load_procedures(opengl);
494 #if HAVE_GLXGETPROCADDRESS
495 #define SelectedGetProcAddress glXGetProcAddress
496 #elif HAVE_WGLGETPROCADDRESS
497 #define SelectedGetProcAddress wglGetProcAddress
500 #define LOAD_OPENGL_FUN(name, type) \
501 procs->name = (type)SelectedGetProcAddress(#name); \
502 if (!procs->name) { \
503 av_log(opengl, AV_LOG_ERROR, "Cannot load OpenGL function: '%s'\n", #name); \
504 return AVERROR(ENOSYS); \
509 return opengl_sdl_load_procedures(opengl);
540 #undef SelectedGetProcAddress
541 #undef LOAD_OPENGL_FUN
547 memset(matrix, 0, 16 *
sizeof(
float));
548 matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.0f;
552 float bottom,
float top,
float nearZ,
float farZ)
554 float ral = right + left;
555 float rsl = right - left;
556 float tab = top + bottom;
557 float tsb = top - bottom;
558 float fan = farZ + nearZ;
559 float fsn = farZ - nearZ;
561 memset(matrix, 0, 16 *
sizeof(
float));
562 matrix[0] = 2.0f / rsl;
563 matrix[5] = 2.0f / tsb;
564 matrix[10] = -2.0f / fsn;
565 matrix[12] = -ral / rsl;
566 matrix[13] = -
tab / tsb;
567 matrix[14] = -fan / fsn;
575 const char *extension;
578 } required_extensions[] = {
579 {
"GL_ARB_multitexture", 1, 3 },
580 {
"GL_ARB_vertex_buffer_object", 1, 5 },
581 {
"GL_ARB_vertex_shader", 2, 0 },
582 {
"GL_ARB_fragment_shader", 2, 0 },
583 {
"GL_ARB_shader_objects", 2, 0 },
587 const char *extensions, *
version;
589 version = glGetString(GL_VERSION);
590 extensions = glGetString(GL_EXTENSIONS);
599 for (
i = 0; required_extensions[
i].extension;
i++) {
602 !strstr(extensions, required_extensions[
i].extension)) {
604 required_extensions[
i].extension);
612 #if defined(GL_ES_VERSION_2_0)
613 opengl->
unpack_subimage = !!strstr(extensions,
"GL_EXT_unpack_subimage");
643 case GL_UNSIGNED_SHORT:
645 case GL_UNSIGNED_SHORT_5_6_5:
647 case GL_UNSIGNED_BYTE:
693 int *out_width,
int *out_height)
696 *out_width = in_width;
697 *out_height = in_height;
700 unsigned power_of_2 = 1;
701 while (power_of_2 <
max)
703 *out_height = power_of_2;
704 *out_width = power_of_2;
706 in_width, in_height, *out_width, *out_height);
727 #define FILL_COMPONENT(i) { \
728 shift = (desc->comp[i].depth - 1) >> 3; \
729 opengl->color_map[(i << 2) + (desc->comp[i].offset >> shift)] = 1.0; \
739 #undef FILL_COMPONENT
778 if (!fragment_shader_code) {
791 fragment_shader_code);
846 int new_width, new_height;
848 glBindTexture(GL_TEXTURE_2D, texture);
849 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
850 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
851 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
852 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
853 glTexImage2D(GL_TEXTURE_2D, 0, opengl->
format, new_width, new_height, 0,
913 for (
i = 0;
i < 4;
i++)
939 if ((ret = opengl_sdl_create_window(
h)) < 0) {
944 av_log(opengl,
AV_LOG_ERROR,
"FFmpeg is compiled without SDL. Cannot create default window.\n");
971 SDL_GL_DeleteContext(opengl->glcontext);
972 SDL_DestroyWindow(opengl->window);
1016 if (
desc->nb_components > 1) {
1018 int num_planes =
desc->nb_components - (has_alpha ? 1 : 0);
1026 for (
i = 1;
i < num_planes;
i++)
1042 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1045 (
float)opengl->
background[2] / 255.0f, 1.0f);
1062 if (
h->nb_streams != 1 ||
1065 av_log(opengl,
AV_LOG_ERROR,
"Only a single raw or wrapped avframe video stream is supported.\n");
1105 glClear(GL_COLOR_BUFFER_BIT);
1109 SDL_GL_SwapWindow(opengl->window);
1135 int plane =
desc->comp[comp_index].plane;
1145 data += width_chroma * height_chroma * wordsize;
1149 data += 2 * width_chroma * height_chroma * wordsize;
1157 #define LOAD_TEXTURE_DATA(comp_index, sub) \
1159 int width = sub ? AV_CEIL_RSHIFT(opengl->width, desc->log2_chroma_w) : opengl->width; \
1160 int height = sub ? AV_CEIL_RSHIFT(opengl->height, desc->log2_chroma_h): opengl->height; \
1162 int plane = desc->comp[comp_index].plane; \
1164 glBindTexture(GL_TEXTURE_2D, opengl->texture_name[comp_index]); \
1166 GLint length = ((AVFrame *)input)->linesize[plane]; \
1167 int bytes_per_pixel = opengl_type_size(opengl->type); \
1168 if (!(desc->flags & AV_PIX_FMT_FLAG_PLANAR)) \
1169 bytes_per_pixel *= desc->nb_components; \
1170 data = ((AVFrame *)input)->data[plane]; \
1171 if (!(length % bytes_per_pixel) && \
1172 (opengl->unpack_subimage || ((length / bytes_per_pixel) == width))) { \
1173 length /= bytes_per_pixel; \
1174 if (length != width) \
1175 glPixelStorei(FF_GL_UNPACK_ROW_LENGTH, length); \
1176 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, \
1177 opengl->format, opengl->type, data); \
1178 if (length != width) \
1179 glPixelStorei(FF_GL_UNPACK_ROW_LENGTH, 0); \
1182 for (h = 0; h < height; h++) { \
1183 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, h, width, 1, \
1184 opengl->format, opengl->type, data); \
1189 data = opengl_get_plane_pointer(opengl, input, comp_index, desc); \
1190 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, \
1191 opengl->format, opengl->type, data); \
1203 if (!opengl->
no_window && (ret = opengl_sdl_process_events(
h)) < 0)
1212 glClear(GL_COLOR_BUFFER_BIT);
1216 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1245 SDL_GL_SwapWindow(opengl->window);
1277 #define OFFSET(x) offsetof(OpenGLContext, x)
1278 #define ENC AV_OPT_FLAG_ENCODING_PARAM
static const char *const format[]
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Main libavdevice API header.
#define flags(name, subs,...)
static int FUNC() message(CodedBitstreamContext *ctx, RWContext *rw, SEIRawMessage *current)
common internal and external API header
#define AV_CEIL_RSHIFT(a, b)
static enum AVPixelFormat pix_fmt
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static const char * window_title
static SDL_Window * window
static void write_header(FFV1Context *f)
@ AV_OPT_TYPE_IMAGE_SIZE
offset must point to two consecutive integers
@ AV_CODEC_ID_WRAPPED_AVFRAME
Passthrough codec, AVFrames wrapped in AVPacket.
int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToAppMessageType type, void *data, size_t data_size)
Send control message from device to application.
@ AV_APP_TO_DEV_WINDOW_REPAINT
Repaint request message.
@ AV_APP_TO_DEV_WINDOW_SIZE
Window size change message.
@ AV_DEV_TO_APP_CREATE_WINDOW_BUFFER
Create window buffer message.
@ AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER
Display window buffer message.
@ AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER
Prepare window buffer message.
@ AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER
Destroy window buffer message.
#define AVERROR_EXTERNAL
Generic error in an external library.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
char * av_strdup(const char *s)
Duplicate a string.
#define LIBAVUTIL_VERSION_INT
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
@ AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT
static av_cold int opengl_configure_texture(OpenGLContext *opengl, GLuint texture, GLsizei width, GLsizei height)
static av_cold void opengl_deinit_context(OpenGLContext *opengl)
GLint(APIENTRY * FF_PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const char *name)
void(APIENTRY * FF_PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers)
GLint(APIENTRY * FF_PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const char *name)
static int opengl_write_packet(AVFormatContext *h, AVPacket *pkt)
static int opengl_release_window(AVFormatContext *h)
#define LOAD_OPENGL_FUN(name, type)
static av_cold int opengl_write_trailer(AVFormatContext *h)
#define FF_GL_FRAGMENT_SHADER
void(APIENTRY * FF_PFNGLDELETESHADERPROC)(GLuint shader)
void(APIENTRY * FF_PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer)
void(APIENTRY * FF_PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const char **string, const GLint *length)
#define FF_GL_LINK_STATUS
static int opengl_prepare(OpenGLContext *opengl)
static av_cold int opengl_compile_shaders(OpenGLContext *opengl, enum AVPixelFormat pix_fmt)
static int opengl_write_frame(AVFormatContext *h, int stream_index, AVFrame **frame, unsigned flags)
void(APIENTRY * FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
#define OPENGL_ERROR_CHECK(ctx)
static uint8_t * opengl_get_plane_pointer(OpenGLContext *opengl, AVPacket *pkt, int comp_index, const AVPixFmtDescriptor *desc)
void(APIENTRY * FF_PFNGLDELETEPROGRAMPROC)(GLuint program)
static const AVOption options[]
void(APIENTRY * FF_PFNGLCOMPILESHADERPROC)(GLuint shader)
static const GLushort g_index[6]
#define FILL_COMPONENT(i)
void(APIENTRY * FF_PFNGLLINKPROGRAMPROC)(GLuint program)
void(APIENTRY * FF_PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, uintptr_t pointer)
static av_cold int opengl_prepare_vertex(AVFormatContext *s)
static int av_cold opengl_load_procedures(OpenGLContext *opengl)
void(APIENTRY * FF_PFNGLBUFFERDATAPROC)(GLenum target, ptrdiff_t size, const GLvoid *data, GLenum usage)
static void opengl_compute_display_area(AVFormatContext *s)
#define FF_GL_UNSIGNED_BYTE_2_3_3_REV
AVOutputFormat ff_opengl_muxer
#define FF_GL_COMPILE_STATUS
void(APIENTRY * FF_PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params)
static av_cold GLuint opengl_load_shader(OpenGLContext *opengl, GLenum type, const char *source)
void(APIENTRY * FF_PFNGLUSEPROGRAMPROC)(GLuint program)
void(APIENTRY * FF_PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index)
static int opengl_draw(AVFormatContext *h, void *intput, int repaint, int is_pkt)
#define FF_GL_ELEMENT_ARRAY_BUFFER
static void opengl_make_identity(float matrix[16])
#define FF_GL_UNSIGNED_BYTE_3_3_2
void(APIENTRY * FF_PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader)
static int opengl_create_window(AVFormatContext *h)
static av_cold void opengl_get_texture_size(OpenGLContext *opengl, int in_width, int in_height, int *out_width, int *out_height)
#define FF_GL_UNSIGNED_SHORT_1_5_5_5_REV
#define LOAD_TEXTURE_DATA(comp_index, sub)
static const char * opengl_get_fragment_shader_code(enum AVPixelFormat format)
static void opengl_make_ortho(float matrix[16], float left, float right, float bottom, float top, float nearZ, float farZ)
static int opengl_control_message(AVFormatContext *h, int type, void *data, size_t data_size)
static int opengl_resize(AVFormatContext *h, int width, int height)
void(APIENTRY * FF_PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, char *infoLog)
static const struct OpenGLFormatDesc opengl_format_desc[]
void(APIENTRY * FF_PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
GLuint(APIENTRY * FF_PFNGLCREATEPROGRAMPROC)(void)
static av_cold int opengl_read_limits(AVFormatContext *h)
#define FF_GL_ARRAY_BUFFER
static av_cold int opengl_write_header(AVFormatContext *h)
static av_cold int opengl_init_context(OpenGLContext *opengl)
#define FF_GL_STATIC_DRAW
static int opengl_type_size(GLenum type)
void(APIENTRY * FF_PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, char *infoLog)
#define FF_GL_INFO_LOG_LENGTH
void(APIENTRY * FF_PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers)
static av_cold void opengl_fill_color_map(OpenGLContext *opengl)
static const AVClass opengl_class
void(APIENTRY * FF_PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0)
GLuint(APIENTRY * FF_PFNGLCREATESHADERPROC)(GLenum type)
#define FF_GL_RED_COMPONENT
void(APIENTRY * FF_PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params)
static av_cold void opengl_get_texture_params(OpenGLContext *opengl)
#define FF_GL_VERTEX_SHADER
void(APIENTRY * FF_PFNGLUNIFORM1IPROC)(GLint location, GLint v0)
static const char *const FF_OPENGL_FRAGMENT_SHADER_RGB_PACKET
Fragment shader for packet RGB formats.
static const char *const FF_OPENGL_FRAGMENT_SHADER_GRAY
static const char *const FF_OPENGL_FRAGMENT_SHADER_RGBA_PLANAR
Fragment shader for planar RGBA formats.
static const char *const FF_OPENGL_VERTEX_SHADER
static const char *const FF_OPENGL_FRAGMENT_SHADER_RGB_PLANAR
Fragment shader for planar RGB formats.
static const char *const FF_OPENGL_FRAGMENT_SHADER_YUVA_PLANAR
Fragment shader for planar YUVA formats.
static const char *const FF_OPENGL_FRAGMENT_SHADER_YUV_PLANAR
Fragment shader for planar YUV formats.
static const char *const FF_OPENGL_FRAGMENT_SHADER_RGBA_PACKET
Fragment shader for packet RGBA formats.
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_BGR555
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_RGBA64
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ AV_PIX_FMT_RGB8
packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
@ AV_PIX_FMT_0BGR
packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
@ AV_PIX_FMT_BGR8
packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_RGB0
packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_0RGB
packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
#define AV_PIX_FMT_BGR565
#define AV_PIX_FMT_RGB565
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_BGRA64
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_RGB555
typedef void(RENAME(mix_any_func_type))
#define FF_ARRAY_ELEMS(a)
static int shift(int a, int b)
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
This struct describes the properties of an encoded stream.
enum AVMediaType codec_type
General type of the encoded data.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Rational number (pair of numerator and denominator).
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
FF_PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer
FF_PFNGLGETPROGRAMIVPROC glGetProgramiv
FF_PFNGLDELETEPROGRAMPROC glDeleteProgram
FF_PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation
FF_PFNGLUSEPROGRAMPROC glUseProgram
FF_PFNGLGENBUFFERSPROC glGenBuffers
FF_PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray
FF_PFNGLCOMPILESHADERPROC glCompileShader
FF_PFNGLATTACHSHADERPROC glAttachShader
FF_PFNGLACTIVETEXTUREPROC glActiveTexture
FF_PFNGLBUFFERDATAPROC glBufferData
FF_PFNGLDELETEBUFFERSPROC glDeleteBuffers
FF_PFNGLGETSHADERIVPROC glGetShaderiv
FF_PFNGLCREATESHADERPROC glCreateShader
FF_PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog
FF_PFNGLLINKPROGRAMPROC glLinkProgram
FF_PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv
FF_PFNGLSHADERSOURCEPROC glShaderSource
FF_PFNGLUNIFORM1IPROC glUniform1i
FF_PFNGLCREATEPROGRAMPROC glCreateProgram
FF_PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog
FF_PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation
FF_PFNGLDELETESHADERPROC glDeleteShader
FF_PFNGLBINDBUFFERPROC glBindBuffer
FF_PFNGLUNIFORM1FPROC glUniform1f
GLint projection_matrix_location
Uniforms' locations.
GLfloat chroma_div_h
Chroma subsampling h ratio.
GLuint index_buffer
Index buffer.
GLint texture_location[4]
GLint position_attrib
Attibutes' locations.
GLint max_viewport_height
Maximum viewport size.
GLuint fragment_shader
Fragment shader for current pix_pmt.
int inited
Set to 1 when write_header was successfully called.
GLuint texture_name[4]
Textures' IDs.
GLfloat model_view_matrix[16]
Modev view matrix.
GLuint vertex_shader
Vertex shader.
uint8_t background[4]
Background color.
GLint chroma_div_h_location
GLfloat projection_matrix[16]
Projection matrix.
int picture_width
Rendered width.
GLint texture_coords_attrib
int no_window
0 for create default window
GLfloat color_map[16]
RGBA color map matrix.
FFOpenGLFunctions glprocs
GLuint vertex_buffer
Vertex buffer.
int non_pow_2_textures
1 when non power of 2 textures are supported
GLint max_viewport_width
Maximum viewport size.
GLfloat chroma_div_w
Chroma subsampling w ratio.
GLint max_texture_size
Maximum texture size.
char * window_title
Title of the window.
GLuint program
Shader program.
int picture_height
Rendered height.
int unpack_subimage
1 when GL_EXT_unpack_subimage is available
OpenGLVertexInfo vertex[4]
VBO.
enum AVPixelFormat pix_fmt
Stream pixel format.
GLint chroma_div_w_location
GLint model_view_matrix_location
static const struct twinvq_data tab
static int write_trailer(AVFormatContext *s1)