DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
cap_ogg.c File Reference
#include <sys/types.h>
#include "quakedef.h"
#include "client.h"
#include "cap_ogg.h"
+ Include dependency graph for cap_ogg.c:

Go to the source code of this file.

Data Structures

struct  alloc_chain
 
struct  allocatedoggpage_t
 
struct  capturevideostate_ogg_formatspecific_t
 
struct  ogg_packet
 
struct  ogg_page
 
struct  ogg_stream_state
 
struct  ogg_sync_state
 
struct  oggpack_buffer
 
struct  theora_comment
 Comment header metadata. More...
 
struct  theora_info
 Theora bitstream info. More...
 
struct  theora_state
 Codec internal state and context. More...
 
struct  vorbis_block
 
struct  vorbis_comment
 
struct  vorbis_dsp_state
 
struct  vorbis_info
 
struct  yuv_buffer
 

Macros

#define LOAD_FORMATSPECIFIC_OGG()
 
#define TH_ENCCTL_SET_VP3_COMPATIBLE   (10)
 

Typedefs

typedef int channelmapping_t[8]
 

Enumerations

enum  theora_colorspace { OC_CS_UNSPECIFIED , OC_CS_ITU_REC_470M , OC_CS_ITU_REC_470BG , OC_CS_NSPACES }
 A Colorspace. More...
 
enum  theora_pixelformat { OC_PF_420 , OC_PF_RSVD , OC_PF_422 , OC_PF_444 }
 A Chroma subsampling. More...
 

Functions

qbool SCR_CaptureVideo_Ogg_Available (void)
 
void SCR_CaptureVideo_Ogg_BeginVideo (void)
 
void SCR_CaptureVideo_Ogg_CloseDLL (void)
 
static void SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV (u8 *in)
 
static void SCR_CaptureVideo_Ogg_EndVideo (void)
 
static void SCR_CaptureVideo_Ogg_FlushInterleaving (void)
 
void SCR_CaptureVideo_Ogg_Init (void)
 
static void SCR_CaptureVideo_Ogg_Interleave (void)
 
static qbool SCR_CaptureVideo_Ogg_OpenLibrary (void)
 
static void SCR_CaptureVideo_Ogg_SoundFrame (const portable_sampleframe_t *paintbuffer, size_t length)
 
static void SCR_CaptureVideo_Ogg_VideoFrames (int num, u8 *in)
 

Variables

static cvar_t cl_capturevideo_ogg_theora_bitrate = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_bitrate", "-1", "video bitrate (45 to 2000 kbps), or -1 to use quality only; higher is better; setting both to -1 achieves unlimited quality"}
 
static cvar_t cl_capturevideo_ogg_theora_keyframe_auto_threshold = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_auto_threshold", "80", "threshold for key frame decision (0 to 100)"}
 
static cvar_t cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier", "1.5", "how much more bit rate to use for keyframes, specified as a factor of at least 1"}
 
static cvar_t cl_capturevideo_ogg_theora_keyframe_maxinterval = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_maxinterval", "64", "maximum keyframe interval (1 to 1000)"}
 
static cvar_t cl_capturevideo_ogg_theora_keyframe_mininterval = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_mininterval", "8", "minimum keyframe interval (1 to 1000)"}
 
static cvar_t cl_capturevideo_ogg_theora_noise_sensitivity = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_noise_sensitivity", "1", "video noise sensitivity (0 to 6); lower is better"}
 
static cvar_t cl_capturevideo_ogg_theora_quality = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_quality", "48", "video quality factor (0 to 63), or -1 to use bitrate only; higher is better; setting both to -1 achieves unlimited quality"}
 
static cvar_t cl_capturevideo_ogg_theora_sharpness = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_sharpness", "0", "sharpness (0 to 2); lower is sharper"}
 
static cvar_t cl_capturevideo_ogg_theora_vp3compat = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_vp3compat", "1", "make VP3 compatible theora streams"}
 
static cvar_t cl_capturevideo_ogg_vorbis_quality = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_vorbis_quality", "3", "audio quality (-1 to 10); higher is better"}
 
channelmapping_t mapping [8]
 
static dllhandle_t og_dll = NULL
 
static dllfunction_t oggfuncs []
 
static int64_t(* qogg_page_granulepos )(ogg_page *og)
 
static int(* qogg_stream_clear )(ogg_stream_state *os)
 
static int(* qogg_stream_flush )(ogg_stream_state *os, ogg_page *og)
 
static int(* qogg_stream_init )(ogg_stream_state *os, int serialno)
 
static int(* qogg_stream_packetin )(ogg_stream_state *os, ogg_packet *op)
 
static int(* qogg_stream_pageout )(ogg_stream_state *os, ogg_page *og)
 
static void(* qtheora_clear )(theora_state *t)
 
static void(* qtheora_comment_clear )(theora_comment *tc)
 
static void(* qtheora_comment_init )(theora_comment *tc)
 
static int(* qtheora_control )(theora_state *th, int req, void *buf, size_t buf_sz)
 
static int(* qtheora_encode_comment )(theora_comment *tc, ogg_packet *op)
 
static int(* qtheora_encode_header )(theora_state *t, ogg_packet *op)
 
static int(* qtheora_encode_init )(theora_state *th, theora_info *ti)
 
static int(* qtheora_encode_packetout )(theora_state *t, int last_p, ogg_packet *op)
 
static int(* qtheora_encode_tables )(theora_state *t, ogg_packet *op)
 
static int(* qtheora_encode_YUVin )(theora_state *t, yuv_buffer *yuv)
 
static double(* qtheora_granule_time )(theora_state *th, int64_t granulepos)
 
static void(* qtheora_info_clear )(theora_info *c)
 
static void(* qtheora_info_init )(theora_info *c)
 
static int(* qvorbis_analysis )(vorbis_block *vb, ogg_packet *op)
 
static int(* qvorbis_analysis_blockout )(vorbis_dsp_state *v, vorbis_block *vb)
 
static float **(* qvorbis_analysis_buffer )(vorbis_dsp_state *v, int vals)
 
static int(* qvorbis_analysis_headerout )(vorbis_dsp_state *v, vorbis_comment *vc, ogg_packet *op, ogg_packet *op_comm, ogg_packet *op_code)
 
static int(* qvorbis_analysis_init )(vorbis_dsp_state *v, vorbis_info *vi)
 
static int(* qvorbis_analysis_wrote )(vorbis_dsp_state *v, int vals)
 
static int(* qvorbis_bitrate_addblock )(vorbis_block *vb)
 
static int(* qvorbis_bitrate_flushpacket )(vorbis_dsp_state *vd, ogg_packet *op)
 
static int(* qvorbis_block_clear )(vorbis_block *vb)
 
static int(* qvorbis_block_init )(vorbis_dsp_state *v, vorbis_block *vb)
 
static void(* qvorbis_comment_clear )(vorbis_comment *vc)
 
static void(* qvorbis_comment_init )(vorbis_comment *vc)
 
static int(* qvorbis_commentheader_out )(vorbis_comment *vc, ogg_packet *op)
 
static void(* qvorbis_dsp_clear )(vorbis_dsp_state *v)
 
static int(* qvorbis_encode_init_vbr )(vorbis_info *vi, long channels, long rate, float base_quality)
 
static double(* qvorbis_granule_time )(vorbis_dsp_state *v, int64_t granulepos)
 
static void(* qvorbis_info_clear )(vorbis_info *vi)
 
static void(* qvorbis_info_init )(vorbis_info *vi)
 
static dllhandle_t th_dll = NULL
 
static dllfunction_t theorafuncs []
 
static dllhandle_t ve_dll = NULL
 
static dllhandle_t vo_dll = NULL
 
static dllfunction_t vorbisencfuncs []
 
static dllfunction_t vorbisfuncs []
 

Macro Definition Documentation

◆ LOAD_FORMATSPECIFIC_OGG

◆ TH_ENCCTL_SET_VP3_COMPATIBLE

#define TH_ENCCTL_SET_VP3_COMPATIBLE   (10)

Definition at line 297 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

Typedef Documentation

◆ channelmapping_t

typedef int channelmapping_t[8]

Definition at line 878 of file cap_ogg.c.

Enumeration Type Documentation

◆ theora_colorspace

A Colorspace.

Enumerator
OC_CS_UNSPECIFIED 

The colorspace is unknown or unspecified.

OC_CS_ITU_REC_470M 

This is the best option for 'NTSC' content.

OC_CS_ITU_REC_470BG 

This is the best option for 'PAL' content.

OC_CS_NSPACES 

This marks the end of the defined colorspaces.

Definition at line 316 of file cap_ogg.c.

316 {
theora_colorspace
A Colorspace.
Definition cap_ogg.c:316
@ OC_CS_ITU_REC_470BG
This is the best option for 'PAL' content.
Definition cap_ogg.c:319
@ OC_CS_NSPACES
This marks the end of the defined colorspaces.
Definition cap_ogg.c:320
@ OC_CS_ITU_REC_470M
This is the best option for 'NTSC' content.
Definition cap_ogg.c:318
@ OC_CS_UNSPECIFIED
The colorspace is unknown or unspecified.
Definition cap_ogg.c:317

◆ theora_pixelformat

A Chroma subsampling.

These enumerate the available chroma subsampling options supported by the theora format. See Section 4.4 of the specification for exact definitions.

Enumerator
OC_PF_420 

Chroma subsampling by 2 in each direction (4:2:0)

OC_PF_RSVD 

Reserved value.

OC_PF_422 

Horizonatal chroma subsampling by 2 (4:2:2)

OC_PF_444 

No chroma subsampling at all (4:4:4)

Definition at line 330 of file cap_ogg.c.

330 {
331 OC_PF_420,
332 OC_PF_RSVD,
333 OC_PF_422,
334 OC_PF_444
theora_pixelformat
A Chroma subsampling.
Definition cap_ogg.c:330
@ OC_PF_444
No chroma subsampling at all (4:4:4)
Definition cap_ogg.c:334
@ OC_PF_422
Horizonatal chroma subsampling by 2 (4:2:2)
Definition cap_ogg.c:333
@ OC_PF_420
Chroma subsampling by 2 in each direction (4:2:0)
Definition cap_ogg.c:331
@ OC_PF_RSVD
Reserved value.
Definition cap_ogg.c:332

Function Documentation

◆ SCR_CaptureVideo_Ogg_Available()

qbool SCR_CaptureVideo_Ogg_Available ( void )

Definition at line 593 of file cap_ogg.c.

594{
595 return og_dll && th_dll && vo_dll && ve_dll;
596}
static dllhandle_t og_dll
Definition cap_ogg.c:506
static dllhandle_t ve_dll
Definition cap_ogg.c:506
static dllhandle_t vo_dll
Definition cap_ogg.c:506
static dllhandle_t th_dll
Definition cap_ogg.c:506

References og_dll, th_dll, ve_dll, and vo_dll.

◆ SCR_CaptureVideo_Ogg_BeginVideo()

void SCR_CaptureVideo_Ogg_BeginVideo ( void )

Definition at line 921 of file cap_ogg.c.

922{
923 char vabuf[1024];
924 cls.capturevideo.format = CAPTUREVIDEOFORMAT_OGG_VORBIS_THEORA;
925 cls.capturevideo.formatextension = "ogv";
926 cls.capturevideo.videofile = FS_OpenRealFile(va(vabuf, sizeof(vabuf), "%s.%s", cls.capturevideo.basename, cls.capturevideo.formatextension), "wb", false);
927 if (!cls.capturevideo.videofile)
928 {
929 Con_Printf(CON_ERROR "Failed to open video file \"%s\", cancelling video capture.\n", vabuf);
930 cls.capturevideo.error = true;
931 return;
932 }
933 cls.capturevideo.writeEndVideo = SCR_CaptureVideo_Ogg_EndVideo;
934 cls.capturevideo.writeVideoFrame = SCR_CaptureVideo_Ogg_VideoFrames;
935 cls.capturevideo.writeSoundFrame = SCR_CaptureVideo_Ogg_SoundFrame;
936 cls.capturevideo.formatspecific = Mem_Alloc(tempmempool, sizeof(capturevideostate_ogg_formatspecific_t));
937 {
939 int num, denom, i;
940 ogg_page pg;
941 ogg_packet pt, pt2, pt3;
944 theora_info ti;
945 int vp3compat;
946
947 format->serial1 = rand();
948 qogg_stream_init(&format->to, format->serial1);
949
950 if(cls.capturevideo.soundrate)
951 {
952 do
953 {
954 format->serial2 = rand();
955 }
956 while(format->serial1 == format->serial2);
957 qogg_stream_init(&format->vo, format->serial2);
958 }
959
960 format->videopage.len = format->audiopage.len = 0;
961
963 ti.frame_width = cls.capturevideo.width;
964 ti.frame_height = cls.capturevideo.height;
965 ti.width = (ti.frame_width + 15) & ~15;
966 ti.height = (ti.frame_height + 15) & ~15;
967 //ti.offset_x = ((ti.width - ti.frame_width) / 2) & ~1;
968 //ti.offset_y = ((ti.height - ti.frame_height) / 2) & ~1;
969
970 for(i = 0; i < 2; ++i)
971 {
972 format->yuv[i].y_width = ti.width;
973 format->yuv[i].y_height = ti.height;
974 format->yuv[i].y_stride = ti.width;
975 format->yuv[i].uv_width = ti.width / 2;
976 format->yuv[i].uv_height = ti.height / 2;
977 format->yuv[i].uv_stride = ti.width / 2;
978 format->yuv[i].y = (unsigned char *) Mem_Alloc(tempmempool, format->yuv[i].y_stride * format->yuv[i].y_height);
979 format->yuv[i].u = (unsigned char *) Mem_Alloc(tempmempool, format->yuv[i].uv_stride * format->yuv[i].uv_height);
980 format->yuv[i].v = (unsigned char *) Mem_Alloc(tempmempool, format->yuv[i].uv_stride * format->yuv[i].uv_height);
981 }
982 format->yuvi = -1; // -1: no frame valid yet, write into 0
983
984 FindFraction(cls.capturevideo.framerate / cls.capturevideo.framestep, &num, &denom, 1001);
985 ti.fps_numerator = num;
986 ti.fps_denominator = denom;
987
988 FindFraction(1 / vid_pixelheight.value, &num, &denom, 1000);
989 ti.aspect_numerator = num;
990 ti.aspect_denominator = denom;
991
994
995 ti.quick_p = true; // http://mlblog.osdir.com/multimedia.ogg.theora.general/2004-07/index.shtml
996 ti.dropframes_p = false;
997
1000
1001 if(ti.target_bitrate <= 0)
1002 {
1003 ti.target_bitrate = -1;
1004 ti.keyframe_data_target_bitrate = (unsigned int)-1;
1005 }
1006 else
1007 {
1009
1010 if(ti.target_bitrate < 45000 || ti.target_bitrate > 2000000)
1011 Con_DPrintf("WARNING: requesting an odd bitrate for theora (sensible values range from 45 to 2000 kbps)\n");
1012 }
1013
1014 if(ti.quality < 0 || ti.quality > 63)
1015 {
1016 ti.quality = 63;
1017 if(ti.target_bitrate <= 0)
1018 {
1019 ti.target_bitrate = 0x7FFFFFFF;
1020 ti.keyframe_data_target_bitrate = 0x7FFFFFFF;
1021 }
1022 }
1023
1024 // this -1 magic is because ti.keyframe_frequency and ti.keyframe_mindistance use different metrics
1030
1033
1034 qtheora_encode_init(&format->ts, &ti);
1035 qtheora_info_clear(&ti);
1036
1038 {
1039 vp3compat = 1;
1040 qtheora_control(&format->ts, TH_ENCCTL_SET_VP3_COMPATIBLE, &vp3compat, sizeof(vp3compat));
1041 if(!vp3compat)
1042 Con_DPrintf("Warning: theora stream is not fully VP3 compatible\n");
1043 }
1044
1045 // vorbis?
1046 if(cls.capturevideo.soundrate)
1047 {
1049 qvorbis_encode_init_vbr(&format->vi, cls.capturevideo.soundchannels, cls.capturevideo.soundrate, bound(-1, cl_capturevideo_ogg_vorbis_quality.value, 10) * 0.099);
1052 qvorbis_block_init(&format->vd, &format->vb);
1053 }
1054
1056
1057 /* create the remaining theora headers */
1058 qtheora_encode_header(&format->ts, &pt);
1059 qogg_stream_packetin(&format->to, &pt);
1060 if (qogg_stream_pageout (&format->to, &pg) != 1)
1061 fprintf (stderr, "Internal Ogg library error.\n");
1062 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
1063 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
1064
1066 qogg_stream_packetin(&format->to, &pt);
1067 qtheora_encode_tables(&format->ts, &pt);
1068 qogg_stream_packetin (&format->to, &pt);
1069
1071
1072 if(cls.capturevideo.soundrate)
1073 {
1074 qvorbis_analysis_headerout(&format->vd, &vc, &pt, &pt2, &pt3);
1075 qogg_stream_packetin(&format->vo, &pt);
1076 if (qogg_stream_pageout (&format->vo, &pg) != 1)
1077 fprintf (stderr, "Internal Ogg library error.\n");
1078 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
1079 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
1080
1081 qogg_stream_packetin(&format->vo, &pt2);
1082 qogg_stream_packetin(&format->vo, &pt3);
1083
1085 }
1086
1087 for(;;)
1088 {
1089 int result = qogg_stream_flush (&format->to, &pg);
1090 if (result < 0)
1091 fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error
1092 if (result <= 0)
1093 break;
1094 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
1095 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
1096 }
1097
1098 if(cls.capturevideo.soundrate)
1099 for(;;)
1100 {
1101 int result = qogg_stream_flush (&format->vo, &pg);
1102 if (result < 0)
1103 fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error
1104 if (result <= 0)
1105 break;
1106 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
1107 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
1108 }
1109 }
1110}
static int(* qvorbis_encode_init_vbr)(vorbis_info *vi, long channels, long rate, float base_quality)
Definition cap_ogg.c:287
static void(* qvorbis_comment_init)(vorbis_comment *vc)
Definition cap_ogg.c:257
static void SCR_CaptureVideo_Ogg_VideoFrames(int num, u8 *in)
Definition cap_ogg.c:850
static int(* qtheora_encode_comment)(theora_comment *tc, ogg_packet *op)
Definition cap_ogg.c:438
static int(* qtheora_control)(theora_state *th, int req, void *buf, size_t buf_sz)
Definition cap_ogg.c:446
static int(* qvorbis_analysis_init)(vorbis_dsp_state *v, vorbis_info *vi)
Definition cap_ogg.c:268
static int(* qvorbis_block_init)(vorbis_dsp_state *v, vorbis_block *vb)
Definition cap_ogg.c:260
#define TH_ENCCTL_SET_VP3_COMPATIBLE
Definition cap_ogg.c:297
static void(* qtheora_info_init)(theora_info *c)
Definition cap_ogg.c:440
static cvar_t cl_capturevideo_ogg_theora_keyframe_auto_threshold
Definition cap_ogg.c:14
static cvar_t cl_capturevideo_ogg_theora_sharpness
Definition cap_ogg.c:16
static int(* qtheora_encode_init)(theora_state *th, theora_info *ti)
Definition cap_ogg.c:433
static int(* qvorbis_analysis_headerout)(vorbis_dsp_state *v, vorbis_comment *vc, ogg_packet *op, ogg_packet *op_comm, ogg_packet *op_code)
Definition cap_ogg.c:270
static void(* qvorbis_info_init)(vorbis_info *vi)
Definition cap_ogg.c:255
static void(* qtheora_info_clear)(theora_info *c)
Definition cap_ogg.c:441
#define LOAD_FORMATSPECIFIC_OGG()
Definition cap_ogg.c:637
static cvar_t cl_capturevideo_ogg_theora_vp3compat
Definition cap_ogg.c:8
static cvar_t cl_capturevideo_ogg_theora_bitrate
Definition cap_ogg.c:10
static int(* qtheora_encode_tables)(theora_state *t, ogg_packet *op)
Definition cap_ogg.c:439
static void(* qtheora_comment_clear)(theora_comment *tc)
Definition cap_ogg.c:444
static cvar_t cl_capturevideo_ogg_theora_keyframe_maxinterval
Definition cap_ogg.c:12
static void(* qtheora_comment_init)(theora_comment *tc)
Definition cap_ogg.c:443
static cvar_t cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier
Definition cap_ogg.c:11
static int(* qogg_stream_pageout)(ogg_stream_state *os, ogg_page *og)
Definition cap_ogg.c:106
static cvar_t cl_capturevideo_ogg_theora_quality
Definition cap_ogg.c:9
static void SCR_CaptureVideo_Ogg_EndVideo(void)
Definition cap_ogg.c:715
static cvar_t cl_capturevideo_ogg_theora_keyframe_mininterval
Definition cap_ogg.c:13
static int(* qogg_stream_packetin)(ogg_stream_state *os, ogg_packet *op)
Definition cap_ogg.c:105
static void(* qvorbis_comment_clear)(vorbis_comment *vc)
Definition cap_ogg.c:258
static int(* qtheora_encode_header)(theora_state *t, ogg_packet *op)
Definition cap_ogg.c:437
static int(* qogg_stream_flush)(ogg_stream_state *os, ogg_page *og)
Definition cap_ogg.c:107
static cvar_t cl_capturevideo_ogg_vorbis_quality
Definition cap_ogg.c:17
static cvar_t cl_capturevideo_ogg_theora_noise_sensitivity
Definition cap_ogg.c:15
static void SCR_CaptureVideo_Ogg_SoundFrame(const portable_sampleframe_t *paintbuffer, size_t length)
Definition cap_ogg.c:891
static int(* qogg_stream_init)(ogg_stream_state *os, int serialno)
Definition cap_ogg.c:111
cvar_t vid_pixelheight
Definition cl_screen.c:58
char * va(char *buf, size_t buflen, const char *format,...)
Definition common.c:972
void FindFraction(double val, int *num, int *denom, int denomMax)
Definition common.c:1436
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define CON_ERROR
Definition console.h:102
fs_offset_t FS_Write(qfile_t *file, const void *data, size_t datasize)
Definition fs.c:3019
qfile_t * FS_OpenRealFile(const char *filepath, const char *mode, qbool quiet)
Definition fs.c:2901
static int(ZEXPORT *qz_inflate)(z_stream *strm
#define max(A, B)
Definition mathlib.h:38
#define bound(min, num, max)
Definition mathlib.h:34
int i
void vec2 tc
float value
Definition cvar.h:74
int integer
Definition cvar.h:73
unsigned char * header
Definition cap_ogg.c:31
long body_len
Definition cap_ogg.c:34
long header_len
Definition cap_ogg.c:32
unsigned char * body
Definition cap_ogg.c:33
Comment header metadata.
Definition cap_ogg.c:426
Theora bitstream info.
Definition cap_ogg.c:357
int32_t keyframe_auto_threshold
Definition cap_ogg.c:387
int target_bitrate
nominal bitrate in bits per second
Definition cap_ogg.c:369
int keyframe_auto_p
Definition cap_ogg.c:382
uint32_t frame_height
display frame height
Definition cap_ogg.c:361
int quick_p
Quick encode/decode.
Definition cap_ogg.c:371
uint32_t aspect_denominator
pixel aspect ratio denominator
Definition cap_ogg.c:367
uint32_t fps_numerator
frame rate numerator
Definition cap_ogg.c:364
uint32_t keyframe_data_target_bitrate
Definition cap_ogg.c:386
theora_colorspace colorspace
colorspace
Definition cap_ogg.c:368
theora_pixelformat pixelformat
chroma subsampling mode to expect
Definition cap_ogg.c:392
uint32_t width
encoded frame width
Definition cap_ogg.c:358
int quality
Nominal quality setting, 0-63.
Definition cap_ogg.c:370
uint32_t keyframe_frequency_force
Definition cap_ogg.c:384
uint32_t aspect_numerator
pixel aspect ratio numerator
Definition cap_ogg.c:366
uint32_t height
encoded frame height
Definition cap_ogg.c:359
uint32_t keyframe_frequency
Definition cap_ogg.c:383
uint32_t keyframe_mindistance
Definition cap_ogg.c:388
int32_t noise_sensitivity
Definition cap_ogg.c:389
int32_t sharpness
Definition cap_ogg.c:390
uint32_t frame_width
display frame width
Definition cap_ogg.c:360
int dropframes_p
Definition cap_ogg.c:381
uint32_t fps_denominator
frame rate denominator
Definition cap_ogg.c:365
mempool_t * tempmempool
Definition zone.c:794
#define Mem_Alloc(pool, size)
Definition zone.h:92

References theora_info::aspect_denominator, theora_info::aspect_numerator, ogg_page::body, ogg_page::body_len, bound, cl_capturevideo_ogg_theora_bitrate, cl_capturevideo_ogg_theora_keyframe_auto_threshold, cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier, cl_capturevideo_ogg_theora_keyframe_maxinterval, cl_capturevideo_ogg_theora_keyframe_mininterval, cl_capturevideo_ogg_theora_noise_sensitivity, cl_capturevideo_ogg_theora_quality, cl_capturevideo_ogg_theora_sharpness, cl_capturevideo_ogg_theora_vp3compat, cl_capturevideo_ogg_vorbis_quality, cls, theora_info::colorspace, Con_DPrintf(), CON_ERROR, Con_Printf(), theora_info::dropframes_p, FindFraction(), format, theora_info::fps_denominator, theora_info::fps_numerator, theora_info::frame_height, theora_info::frame_width, FS_OpenRealFile(), FS_Write(), ogg_page::header, ogg_page::header_len, theora_info::height, i, int(), cvar_t::integer, theora_info::keyframe_auto_p, theora_info::keyframe_auto_threshold, theora_info::keyframe_data_target_bitrate, theora_info::keyframe_frequency, theora_info::keyframe_frequency_force, theora_info::keyframe_mindistance, LOAD_FORMATSPECIFIC_OGG, max, Mem_Alloc, theora_info::noise_sensitivity, OC_CS_UNSPECIFIED, OC_PF_420, theora_info::pixelformat, qogg_stream_flush, qogg_stream_init, qogg_stream_packetin, qogg_stream_pageout, qtheora_comment_clear, qtheora_comment_init, qtheora_control, qtheora_encode_comment, qtheora_encode_header, qtheora_encode_init, qtheora_encode_tables, qtheora_info_clear, qtheora_info_init, theora_info::quality, theora_info::quick_p, qvorbis_analysis_headerout, qvorbis_analysis_init, qvorbis_block_init, qvorbis_comment_clear, qvorbis_comment_init, qvorbis_encode_init_vbr, qvorbis_info_init, SCR_CaptureVideo_Ogg_EndVideo(), SCR_CaptureVideo_Ogg_SoundFrame(), SCR_CaptureVideo_Ogg_VideoFrames(), theora_info::sharpness, theora_info::target_bitrate, tc, tempmempool, TH_ENCCTL_SET_VP3_COMPATIBLE, va(), cvar_t::value, vid_pixelheight, and theora_info::width.

◆ SCR_CaptureVideo_Ogg_CloseDLL()

void SCR_CaptureVideo_Ogg_CloseDLL ( void )

Definition at line 598 of file cap_ogg.c.

599{
604}
void Sys_FreeLibrary(dllhandle_t *handle)
Definition sys_shared.c:245

References og_dll, Sys_FreeLibrary(), th_dll, ve_dll, and vo_dll.

◆ SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV()

static void SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV ( u8 * in)
static

Definition at line 808 of file cap_ogg.c.

809{
811 yuv_buffer *yuv;
812 int x, y;
813 int blockr, blockg, blockb;
814 unsigned char *b;
815 int w = cls.capturevideo.width;
816 int h = cls.capturevideo.height;
817 int inpitch = w*4;
818
819 yuv = &format->yuv[format->yuvi];
820
821 for(y = 0; y < h; ++y)
822 {
823 for(b = in + (h-1-y)*w*4, x = 0; x < w; ++x)
824 {
825 blockr = b[2];
826 blockg = b[1];
827 blockb = b[0];
828 yuv->y[x + yuv->y_stride * y] =
829 cls.capturevideo.yuvnormalizetable[0][cls.capturevideo.rgbtoyuvscaletable[0][0][blockr] + cls.capturevideo.rgbtoyuvscaletable[0][1][blockg] + cls.capturevideo.rgbtoyuvscaletable[0][2][blockb]];
830 b += 4;
831 }
832
833 if ((y & 1) == 0 && y/2 < h/2) // if h is odd, this skips the last row
834 {
835 for(b = in + (h-2-y)*w*4, x = 0; x < w/2; ++x)
836 {
837 blockr = (b[2] + b[6] + b[inpitch+2] + b[inpitch+6]) >> 2;
838 blockg = (b[1] + b[5] + b[inpitch+1] + b[inpitch+5]) >> 2;
839 blockb = (b[0] + b[4] + b[inpitch+0] + b[inpitch+4]) >> 2;
840 yuv->u[x + yuv->uv_stride * (y/2)] =
841 cls.capturevideo.yuvnormalizetable[1][cls.capturevideo.rgbtoyuvscaletable[1][0][blockr] + cls.capturevideo.rgbtoyuvscaletable[1][1][blockg] + cls.capturevideo.rgbtoyuvscaletable[1][2][blockb] + 128];
842 yuv->v[x + yuv->uv_stride * (y/2)] =
843 cls.capturevideo.yuvnormalizetable[2][cls.capturevideo.rgbtoyuvscaletable[2][0][blockr] + cls.capturevideo.rgbtoyuvscaletable[2][1][blockg] + cls.capturevideo.rgbtoyuvscaletable[2][2][blockb] + 128];
844 b += 8;
845 }
846 }
847 }
848}
GLubyte GLubyte GLubyte GLubyte w
Definition glquake.h:782
GLint GLenum GLint GLint y
Definition glquake.h:651
GLint GLenum GLint x
Definition glquake.h:651
dp_FragColor b
unsigned char * y
Pointer to start of luminance data.
Definition cap_ogg.c:307
unsigned char * u
Pointer to start of Cb data.
Definition cap_ogg.c:308
int y_stride
Offset in bytes between successive rows.
Definition cap_ogg.c:302
unsigned char * v
Pointer to start of Cr data.
Definition cap_ogg.c:309
int uv_stride
Offset between successive chroma rows.
Definition cap_ogg.c:306

References b, cls, format, LOAD_FORMATSPECIFIC_OGG, yuv_buffer::u, yuv_buffer::uv_stride, yuv_buffer::v, w, x, y, yuv_buffer::y, and yuv_buffer::y_stride.

Referenced by SCR_CaptureVideo_Ogg_VideoFrames().

◆ SCR_CaptureVideo_Ogg_EndVideo()

static void SCR_CaptureVideo_Ogg_EndVideo ( void )
static

Definition at line 715 of file cap_ogg.c.

716{
718 ogg_page pg;
719 ogg_packet pt;
720
721 if(format->yuvi >= 0)
722 {
723 // send the previous (and last) frame
724 while(format->lastnum-- > 0)
725 {
726 qtheora_encode_YUVin(&format->ts, &format->yuv[format->yuvi]);
727
728 while(qtheora_encode_packetout(&format->ts, !format->lastnum, &pt))
729 qogg_stream_packetin(&format->to, &pt);
730
732 }
733 }
734
735 if(cls.capturevideo.soundrate)
736 {
738 while(qvorbis_analysis_blockout(&format->vd, &format->vb) == 1)
739 {
742 while(qvorbis_bitrate_flushpacket(&format->vd, &pt))
743 qogg_stream_packetin(&format->vo, &pt);
745 }
746 }
747
749
750 while(qogg_stream_pageout(&format->to, &pg) > 0)
751 {
752 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
753 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
754 }
755
756 if(cls.capturevideo.soundrate)
757 {
758 while(qogg_stream_pageout(&format->vo, &pg) > 0)
759 {
760 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
761 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
762 }
763 }
764
765 while (1) {
766 int result = qogg_stream_flush (&format->to, &pg);
767 if (result < 0)
768 fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error
769 if (result <= 0)
770 break;
771 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
772 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
773 }
774
775 if(cls.capturevideo.soundrate)
776 {
777 while (1) {
778 int result = qogg_stream_flush (&format->vo, &pg);
779 if (result < 0)
780 fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error
781 if (result <= 0)
782 break;
783 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
784 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
785 }
786
790 }
791
793 qtheora_clear(&format->ts);
795
796 Mem_Free(format->yuv[0].y);
797 Mem_Free(format->yuv[0].u);
798 Mem_Free(format->yuv[0].v);
799 Mem_Free(format->yuv[1].y);
800 Mem_Free(format->yuv[1].u);
801 Mem_Free(format->yuv[1].v);
803
804 FS_Close(cls.capturevideo.videofile);
805 cls.capturevideo.videofile = NULL;
806}
static void SCR_CaptureVideo_Ogg_FlushInterleaving(void)
Definition cap_ogg.c:697
static int(* qvorbis_block_clear)(vorbis_block *vb)
Definition cap_ogg.c:261
static int(* qvorbis_analysis_blockout)(vorbis_dsp_state *v, vorbis_block *vb)
Definition cap_ogg.c:277
static void(* qtheora_clear)(theora_state *t)
Definition cap_ogg.c:442
static int(* qvorbis_bitrate_flushpacket)(vorbis_dsp_state *vd, ogg_packet *op)
Definition cap_ogg.c:281
static void SCR_CaptureVideo_Ogg_Interleave(void)
Definition cap_ogg.c:639
static int(* qvorbis_analysis_wrote)(vorbis_dsp_state *v, int vals)
Definition cap_ogg.c:276
static int(* qvorbis_analysis)(vorbis_block *vb, ogg_packet *op)
Definition cap_ogg.c:278
static int(* qvorbis_bitrate_addblock)(vorbis_block *vb)
Definition cap_ogg.c:280
static int(* qogg_stream_clear)(ogg_stream_state *os)
Definition cap_ogg.c:112
static int(* qtheora_encode_YUVin)(theora_state *t, yuv_buffer *yuv)
Definition cap_ogg.c:434
static void(* qvorbis_info_clear)(vorbis_info *vi)
Definition cap_ogg.c:256
static void(* qvorbis_dsp_clear)(vorbis_dsp_state *v)
Definition cap_ogg.c:262
static int(* qtheora_encode_packetout)(theora_state *t, int last_p, ogg_packet *op)
Definition cap_ogg.c:435
int FS_Close(qfile_t *file)
Definition fs.c:2970
#define NULL
Definition qtypes.h:12
#define Mem_Free(mem)
Definition zone.h:96

References ogg_page::body, ogg_page::body_len, cls, format, FS_Close(), FS_Write(), ogg_page::header, ogg_page::header_len, LOAD_FORMATSPECIFIC_OGG, Mem_Free, NULL, qogg_stream_clear, qogg_stream_flush, qogg_stream_packetin, qogg_stream_pageout, qtheora_clear, qtheora_encode_packetout, qtheora_encode_YUVin, qvorbis_analysis, qvorbis_analysis_blockout, qvorbis_analysis_wrote, qvorbis_bitrate_addblock, qvorbis_bitrate_flushpacket, qvorbis_block_clear, qvorbis_dsp_clear, qvorbis_info_clear, SCR_CaptureVideo_Ogg_FlushInterleaving(), and SCR_CaptureVideo_Ogg_Interleave().

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ SCR_CaptureVideo_Ogg_FlushInterleaving()

static void SCR_CaptureVideo_Ogg_FlushInterleaving ( void )
static

Definition at line 697 of file cap_ogg.c.

698{
700
701 if(cls.capturevideo.soundrate)
702 if(format->audiopage.len)
703 {
704 FS_Write(cls.capturevideo.videofile, format->audiopage.data, format->audiopage.len);
705 format->audiopage.len = 0;
706 }
707
708 if(format->videopage.len)
709 {
710 FS_Write(cls.capturevideo.videofile, format->videopage.data, format->videopage.len);
711 format->videopage.len = 0;
712 }
713}

References cls, format, FS_Write(), and LOAD_FORMATSPECIFIC_OGG.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ SCR_CaptureVideo_Ogg_Init()

void SCR_CaptureVideo_Ogg_Init ( void )

Definition at line 577 of file cap_ogg.c.

References cl_capturevideo_ogg_theora_bitrate, cl_capturevideo_ogg_theora_keyframe_auto_threshold, cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier, cl_capturevideo_ogg_theora_keyframe_maxinterval, cl_capturevideo_ogg_theora_keyframe_mininterval, cl_capturevideo_ogg_theora_noise_sensitivity, cl_capturevideo_ogg_theora_quality, cl_capturevideo_ogg_theora_sharpness, cl_capturevideo_ogg_theora_vp3compat, cl_capturevideo_ogg_vorbis_quality, Cvar_RegisterVariable(), and SCR_CaptureVideo_Ogg_OpenLibrary().

Referenced by CL_Screen_Init().

◆ SCR_CaptureVideo_Ogg_Interleave()

static void SCR_CaptureVideo_Ogg_Interleave ( void )
static

Definition at line 639 of file cap_ogg.c.

640{
642 ogg_page pg;
643
644 if(!cls.capturevideo.soundrate)
645 {
646 while(qogg_stream_pageout(&format->to, &pg) > 0)
647 {
648 FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);
649 FS_Write(cls.capturevideo.videofile, pg.body, pg.body_len);
650 }
651 return;
652 }
653
654 for(;;)
655 {
656 // first: make sure we have a page of both types
657 if(!format->videopage.len)
658 if(qogg_stream_pageout(&format->to, &pg) > 0)
659 {
660 format->videopage.len = pg.header_len + pg.body_len;
661 format->videopage.time = qtheora_granule_time(&format->ts, qogg_page_granulepos(&pg));
662 if(format->videopage.len > sizeof(format->videopage.data))
663 Sys_Error("video page too long");
664 memcpy(format->videopage.data, pg.header, pg.header_len);
665 memcpy(format->videopage.data + pg.header_len, pg.body, pg.body_len);
666 }
667 if(!format->audiopage.len)
668 if(qogg_stream_pageout(&format->vo, &pg) > 0)
669 {
670 format->audiopage.len = pg.header_len + pg.body_len;
671 format->audiopage.time = qvorbis_granule_time(&format->vd, qogg_page_granulepos(&pg));
672 if(format->audiopage.len > sizeof(format->audiopage.data))
673 Sys_Error("audio page too long");
674 memcpy(format->audiopage.data, pg.header, pg.header_len);
675 memcpy(format->audiopage.data + pg.header_len, pg.body, pg.body_len);
676 }
677
678 if(format->videopage.len && format->audiopage.len)
679 {
680 // output the page that ends first
681 if(format->videopage.time < format->audiopage.time)
682 {
683 FS_Write(cls.capturevideo.videofile, format->videopage.data, format->videopage.len);
684 format->videopage.len = 0;
685 }
686 else
687 {
688 FS_Write(cls.capturevideo.videofile, format->audiopage.data, format->audiopage.len);
689 format->audiopage.len = 0;
690 }
691 }
692 else
693 break;
694 }
695}
static double(* qvorbis_granule_time)(vorbis_dsp_state *v, int64_t granulepos)
Definition cap_ogg.c:263
static double(* qtheora_granule_time)(theora_state *th, int64_t granulepos)
Definition cap_ogg.c:445
static int64_t(* qogg_page_granulepos)(ogg_page *og)
Definition cap_ogg.c:113
void Sys_Error(const char *error,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
Causes the entire program to exit ASAP.
Definition sys_shared.c:724

References ogg_page::body, ogg_page::body_len, cls, format, FS_Write(), ogg_page::header, ogg_page::header_len, LOAD_FORMATSPECIFIC_OGG, qogg_page_granulepos, qogg_stream_pageout, qtheora_granule_time, qvorbis_granule_time, and Sys_Error().

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), SCR_CaptureVideo_Ogg_SoundFrame(), and SCR_CaptureVideo_Ogg_VideoFrames().

◆ SCR_CaptureVideo_Ogg_OpenLibrary()

static qbool SCR_CaptureVideo_Ogg_OpenLibrary ( void )
static

Definition at line 508 of file cap_ogg.c.

509{
510 const char* dllnames_og [] =
511 {
512#if defined(WIN32)
513 "libogg-0.dll",
514 "libogg.dll",
515 "ogg.dll",
516#elif defined(MACOSX)
517 "libogg.dylib",
518#else
519 "libogg.so.0",
520 "libogg.so",
521#endif
522 NULL
523 };
524 const char* dllnames_vo [] =
525 {
526#if defined(WIN32)
527 "libvorbis-0.dll",
528 "libvorbis.dll",
529 "vorbis.dll",
530#elif defined(MACOSX)
531 "libvorbis.dylib",
532#else
533 "libvorbis.so.0",
534 "libvorbis.so",
535#endif
536 NULL
537 };
538 const char* dllnames_ve [] =
539 {
540#if defined(WIN32)
541 "libvorbisenc-2.dll",
542 "libvorbisenc.dll",
543 "vorbisenc.dll",
544#elif defined(MACOSX)
545 "libvorbisenc.dylib",
546#else
547 "libvorbisenc.so.2",
548 "libvorbisenc.so",
549#endif
550 NULL
551 };
552 const char* dllnames_th [] =
553 {
554#if defined(WIN32)
555 "libtheora-0.dll",
556 "libtheora.dll",
557 "theora.dll",
558#elif defined(MACOSX)
559 "libtheora.dylib",
560#else
561 "libtheora.so.0",
562 "libtheora.so",
563#endif
564 NULL
565 };
566
567 return
568 Sys_LoadDependency (dllnames_og, &og_dll, oggfuncs)
569 &&
570 Sys_LoadDependency (dllnames_th, &th_dll, theorafuncs)
571 &&
572 Sys_LoadDependency (dllnames_vo, &vo_dll, vorbisfuncs)
573 &&
575}
static dllfunction_t vorbisencfuncs[]
Definition cap_ogg.c:460
static dllfunction_t vorbisfuncs[]
Definition cap_ogg.c:466
static dllfunction_t oggfuncs[]
Definition cap_ogg.c:449
static dllfunction_t theorafuncs[]
Definition cap_ogg.c:488
qbool Sys_LoadDependency(const char **dllnames, dllhandle_t *handle, const dllfunction_t *fcts)
Definition sys_shared.c:131

References NULL, og_dll, oggfuncs, Sys_LoadDependency(), th_dll, theorafuncs, ve_dll, vo_dll, vorbisencfuncs, and vorbisfuncs.

Referenced by SCR_CaptureVideo_Ogg_Init().

◆ SCR_CaptureVideo_Ogg_SoundFrame()

static void SCR_CaptureVideo_Ogg_SoundFrame ( const portable_sampleframe_t * paintbuffer,
size_t length )
static

Definition at line 891 of file cap_ogg.c.

892{
894 float **vorbis_buffer;
895 size_t i;
896 int j;
897 ogg_packet pt;
898 int *map = mapping[bound(1, cls.capturevideo.soundchannels, 8) - 1];
899
900 vorbis_buffer = qvorbis_analysis_buffer(&format->vd, (int)length);
901 for(j = 0; j < cls.capturevideo.soundchannels; ++j)
902 {
903 float *b = vorbis_buffer[map[j]];
904 for(i = 0; i < length; ++i)
905 b[i] = paintbuffer[i].sample[j];
906 }
908
909 while(qvorbis_analysis_blockout(&format->vd, &format->vb) == 1)
910 {
913
914 while(qvorbis_bitrate_flushpacket(&format->vd, &pt))
915 qogg_stream_packetin(&format->vo, &pt);
916 }
917
919}
static float **(* qvorbis_analysis_buffer)(vorbis_dsp_state *v, int vals)
Definition cap_ogg.c:275
channelmapping_t mapping[8]
Definition cap_ogg.c:879
GLenum GLuint GLenum GLsizei length
Definition glquake.h:657
static portable_sampleframe_t paintbuffer[PAINTBUFFER_SIZE]
Definition snd_mix.c:26

References b, bound, cls, format, i, length, LOAD_FORMATSPECIFIC_OGG, mapping, NULL, paintbuffer, qogg_stream_packetin, qvorbis_analysis, qvorbis_analysis_blockout, qvorbis_analysis_buffer, qvorbis_analysis_wrote, qvorbis_bitrate_addblock, qvorbis_bitrate_flushpacket, and SCR_CaptureVideo_Ogg_Interleave().

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ SCR_CaptureVideo_Ogg_VideoFrames()

static void SCR_CaptureVideo_Ogg_VideoFrames ( int num,
u8 * in )
static

Definition at line 850 of file cap_ogg.c.

851{
853 ogg_packet pt;
854
855 // data is in cls.capturevideo.outbuffer as BGRA and has size width*height
856
857 if(format->yuvi >= 0)
858 {
859 // send the previous frame
860 while(format->lastnum-- > 0)
861 {
862 qtheora_encode_YUVin(&format->ts, &format->yuv[format->yuvi]);
863
864 while(qtheora_encode_packetout(&format->ts, false, &pt))
865 qogg_stream_packetin(&format->to, &pt);
866
868 }
869 }
870
871 format->yuvi = (format->yuvi + 1) % 2;
873 format->lastnum = num;
874
875 // TODO maybe send num-1 frames from here already
876}
static void SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV(u8 *in)
Definition cap_ogg.c:808

References format, LOAD_FORMATSPECIFIC_OGG, qogg_stream_packetin, qtheora_encode_packetout, qtheora_encode_YUVin, SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV(), and SCR_CaptureVideo_Ogg_Interleave().

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

Variable Documentation

◆ cl_capturevideo_ogg_theora_bitrate

cvar_t cl_capturevideo_ogg_theora_bitrate = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_bitrate", "-1", "video bitrate (45 to 2000 kbps), or -1 to use quality only; higher is better; setting both to -1 achieves unlimited quality"}
static

Definition at line 10 of file cap_ogg.c.

10{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_bitrate", "-1", "video bitrate (45 to 2000 kbps), or -1 to use quality only; higher is better; setting both to -1 achieves unlimited quality"};
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
Definition cmd.h:53

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_keyframe_auto_threshold

cvar_t cl_capturevideo_ogg_theora_keyframe_auto_threshold = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_auto_threshold", "80", "threshold for key frame decision (0 to 100)"}
static

Definition at line 14 of file cap_ogg.c.

14{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_auto_threshold", "80", "threshold for key frame decision (0 to 100)"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier

cvar_t cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier", "1.5", "how much more bit rate to use for keyframes, specified as a factor of at least 1"}
static

Definition at line 11 of file cap_ogg.c.

11{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier", "1.5", "how much more bit rate to use for keyframes, specified as a factor of at least 1"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_keyframe_maxinterval

cvar_t cl_capturevideo_ogg_theora_keyframe_maxinterval = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_maxinterval", "64", "maximum keyframe interval (1 to 1000)"}
static

Definition at line 12 of file cap_ogg.c.

12{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_maxinterval", "64", "maximum keyframe interval (1 to 1000)"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_keyframe_mininterval

cvar_t cl_capturevideo_ogg_theora_keyframe_mininterval = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_mininterval", "8", "minimum keyframe interval (1 to 1000)"}
static

Definition at line 13 of file cap_ogg.c.

13{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_keyframe_mininterval", "8", "minimum keyframe interval (1 to 1000)"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_noise_sensitivity

cvar_t cl_capturevideo_ogg_theora_noise_sensitivity = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_noise_sensitivity", "1", "video noise sensitivity (0 to 6); lower is better"}
static

Definition at line 15 of file cap_ogg.c.

15{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_noise_sensitivity", "1", "video noise sensitivity (0 to 6); lower is better"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_quality

cvar_t cl_capturevideo_ogg_theora_quality = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_quality", "48", "video quality factor (0 to 63), or -1 to use bitrate only; higher is better; setting both to -1 achieves unlimited quality"}
static

Definition at line 9 of file cap_ogg.c.

9{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_quality", "48", "video quality factor (0 to 63), or -1 to use bitrate only; higher is better; setting both to -1 achieves unlimited quality"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_sharpness

cvar_t cl_capturevideo_ogg_theora_sharpness = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_sharpness", "0", "sharpness (0 to 2); lower is sharper"}
static

Definition at line 16 of file cap_ogg.c.

16{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_sharpness", "0", "sharpness (0 to 2); lower is sharper"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_theora_vp3compat

cvar_t cl_capturevideo_ogg_theora_vp3compat = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_vp3compat", "1", "make VP3 compatible theora streams"}
static

Definition at line 8 of file cap_ogg.c.

8{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_theora_vp3compat", "1", "make VP3 compatible theora streams"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ cl_capturevideo_ogg_vorbis_quality

cvar_t cl_capturevideo_ogg_vorbis_quality = {CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_vorbis_quality", "3", "audio quality (-1 to 10); higher is better"}
static

Definition at line 17 of file cap_ogg.c.

17{CF_CLIENT | CF_ARCHIVE, "cl_capturevideo_ogg_vorbis_quality", "3", "audio quality (-1 to 10); higher is better"};

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_Init().

◆ mapping

channelmapping_t mapping[8]
Initial value:
=
{
{ 0, -1, -1, -1, -1, -1, -1, -1 },
{ 0, 1, -1, -1, -1, -1, -1, -1 },
{ 0, 1, 2, -1, -1, -1, -1, -1 },
{ 0, 1, 2, 3, -1, -1, -1, -1 },
{ 0, 2, 3, 4, 1, -1, -1, -1 },
{ 0, 2, 3, 4, 1, 5, -1, -1 },
{ 0, 2, 3, 4, 1, 5, 6, -1 },
{ 0, 2, 3, 4, 1, 5, 6, 7 }
}

Definition at line 879 of file cap_ogg.c.

880{
881 { 0, -1, -1, -1, -1, -1, -1, -1 }, // mono
882 { 0, 1, -1, -1, -1, -1, -1, -1 }, // stereo
883 { 0, 1, 2, -1, -1, -1, -1, -1 }, // L C R
884 { 0, 1, 2, 3, -1, -1, -1, -1 }, // surround40
885 { 0, 2, 3, 4, 1, -1, -1, -1 }, // FL FC FR RL RR
886 { 0, 2, 3, 4, 1, 5, -1, -1 }, // surround51
887 { 0, 2, 3, 4, 1, 5, 6, -1 }, // (not defined by vorbis spec)
888 { 0, 2, 3, 4, 1, 5, 6, 7 } // surround71 (not defined by vorbis spec)
889};

Referenced by SCR_CaptureVideo_Ogg_SoundFrame().

◆ og_dll

◆ oggfuncs

dllfunction_t oggfuncs[]
static
Initial value:
=
{
{"ogg_stream_packetin", (void **) &qogg_stream_packetin},
{"ogg_stream_pageout", (void **) &qogg_stream_pageout},
{"ogg_stream_flush", (void **) &qogg_stream_flush},
{"ogg_stream_init", (void **) &qogg_stream_init},
{"ogg_stream_clear", (void **) &qogg_stream_clear},
{"ogg_page_granulepos", (void **) &qogg_page_granulepos},
}

Definition at line 449 of file cap_ogg.c.

450{
451 {"ogg_stream_packetin", (void **) &qogg_stream_packetin},
452 {"ogg_stream_pageout", (void **) &qogg_stream_pageout},
453 {"ogg_stream_flush", (void **) &qogg_stream_flush},
454 {"ogg_stream_init", (void **) &qogg_stream_init},
455 {"ogg_stream_clear", (void **) &qogg_stream_clear},
456 {"ogg_page_granulepos", (void **) &qogg_page_granulepos},
457 {NULL, NULL}
458};

Referenced by SCR_CaptureVideo_Ogg_OpenLibrary().

◆ qogg_page_granulepos

int64_t(* qogg_page_granulepos) (ogg_page *og) ( ogg_page * og)
static

Definition at line 113 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_Interleave().

◆ qogg_stream_clear

int(* qogg_stream_clear) (ogg_stream_state *os) ( ogg_stream_state * os)
static

Definition at line 112 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ qogg_stream_flush

int(* qogg_stream_flush) (ogg_stream_state *os, ogg_page *og) ( ogg_stream_state * os,
ogg_page * og )
static

Definition at line 107 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo(), and SCR_CaptureVideo_Ogg_EndVideo().

◆ qogg_stream_init

int(* qogg_stream_init) (ogg_stream_state *os, int serialno) ( ogg_stream_state * os,
int serialno )
static

Definition at line 111 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qogg_stream_packetin

◆ qogg_stream_pageout

int(* qogg_stream_pageout) (ogg_stream_state *os, ogg_page *og) ( ogg_stream_state * os,
ogg_page * og )
static

◆ qtheora_clear

void(* qtheora_clear) (theora_state *t) ( theora_state * t)
static

Definition at line 442 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ qtheora_comment_clear

void(* qtheora_comment_clear) (theora_comment *tc) ( theora_comment * tc)
static

Definition at line 444 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_comment_init

void(* qtheora_comment_init) (theora_comment *tc) ( theora_comment * tc)
static

Definition at line 443 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_control

int(* qtheora_control) (theora_state *th, int req, void *buf, size_t buf_sz) ( theora_state * th,
int req,
void * buf,
size_t buf_sz )
static

Definition at line 446 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_encode_comment

int(* qtheora_encode_comment) (theora_comment *tc, ogg_packet *op) ( theora_comment * tc,
ogg_packet * op )
static

Definition at line 438 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_encode_header

int(* qtheora_encode_header) (theora_state *t, ogg_packet *op) ( theora_state * t,
ogg_packet * op )
static

Definition at line 437 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_encode_init

int(* qtheora_encode_init) (theora_state *th, theora_info *ti) ( theora_state * th,
theora_info * ti )
static

Definition at line 433 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_encode_packetout

int(* qtheora_encode_packetout) (theora_state *t, int last_p, ogg_packet *op) ( theora_state * t,
int last_p,
ogg_packet * op )
static

Definition at line 435 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_VideoFrames().

◆ qtheora_encode_tables

int(* qtheora_encode_tables) (theora_state *t, ogg_packet *op) ( theora_state * t,
ogg_packet * op )
static

Definition at line 439 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_encode_YUVin

int(* qtheora_encode_YUVin) (theora_state *t, yuv_buffer *yuv) ( theora_state * t,
yuv_buffer * yuv )
static

Definition at line 434 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_VideoFrames().

◆ qtheora_granule_time

double(* qtheora_granule_time) (theora_state *th, int64_t granulepos) ( theora_state * th,
int64_t granulepos )
static

Definition at line 445 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_Interleave().

◆ qtheora_info_clear

void(* qtheora_info_clear) (theora_info *c) ( theora_info * c)
static

Definition at line 441 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qtheora_info_init

void(* qtheora_info_init) (theora_info *c) ( theora_info * c)
static

Definition at line 440 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_analysis

int(* qvorbis_analysis) (vorbis_block *vb, ogg_packet *op) ( vorbis_block * vb,
ogg_packet * op )
static

Definition at line 278 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_analysis_blockout

int(* qvorbis_analysis_blockout) (vorbis_dsp_state *v, vorbis_block *vb) ( vorbis_dsp_state * v,
vorbis_block * vb )
static

Definition at line 277 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_analysis_buffer

float **(* qvorbis_analysis_buffer) (vorbis_dsp_state *v, int vals) ( vorbis_dsp_state * v,
int vals )
static

Definition at line 275 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_analysis_headerout

int(* qvorbis_analysis_headerout) (vorbis_dsp_state *v, vorbis_comment *vc, ogg_packet *op, ogg_packet *op_comm, ogg_packet *op_code) ( vorbis_dsp_state * v,
vorbis_comment * vc,
ogg_packet * op,
ogg_packet * op_comm,
ogg_packet * op_code )
static

Definition at line 270 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_analysis_init

int(* qvorbis_analysis_init) (vorbis_dsp_state *v, vorbis_info *vi) ( vorbis_dsp_state * v,
vorbis_info * vi )
static

Definition at line 268 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_analysis_wrote

int(* qvorbis_analysis_wrote) (vorbis_dsp_state *v, int vals) ( vorbis_dsp_state * v,
int vals )
static

Definition at line 276 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_bitrate_addblock

int(* qvorbis_bitrate_addblock) (vorbis_block *vb) ( vorbis_block * vb)
static

Definition at line 280 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_bitrate_flushpacket

int(* qvorbis_bitrate_flushpacket) (vorbis_dsp_state *vd, ogg_packet *op) ( vorbis_dsp_state * vd,
ogg_packet * op )
static

Definition at line 281 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo(), and SCR_CaptureVideo_Ogg_SoundFrame().

◆ qvorbis_block_clear

int(* qvorbis_block_clear) (vorbis_block *vb) ( vorbis_block * vb)
static

Definition at line 261 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ qvorbis_block_init

int(* qvorbis_block_init) (vorbis_dsp_state *v, vorbis_block *vb) ( vorbis_dsp_state * v,
vorbis_block * vb )
static

Definition at line 260 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_comment_clear

void(* qvorbis_comment_clear) (vorbis_comment *vc) ( vorbis_comment * vc)
static

Definition at line 258 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_comment_init

void(* qvorbis_comment_init) (vorbis_comment *vc) ( vorbis_comment * vc)
static

Definition at line 257 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_commentheader_out

int(* qvorbis_commentheader_out) (vorbis_comment *vc, ogg_packet *op) ( vorbis_comment * vc,
ogg_packet * op )
static

Definition at line 269 of file cap_ogg.c.

◆ qvorbis_dsp_clear

void(* qvorbis_dsp_clear) (vorbis_dsp_state *v) ( vorbis_dsp_state * v)
static

Definition at line 262 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ qvorbis_encode_init_vbr

int(* qvorbis_encode_init_vbr) (vorbis_info *vi, long channels, long rate, float base_quality) ( vorbis_info * vi,
long channels,
long rate,
float base_quality )
static

Definition at line 287 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ qvorbis_granule_time

double(* qvorbis_granule_time) (vorbis_dsp_state *v, int64_t granulepos) ( vorbis_dsp_state * v,
int64_t granulepos )
static

Definition at line 263 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_Interleave().

◆ qvorbis_info_clear

void(* qvorbis_info_clear) (vorbis_info *vi) ( vorbis_info * vi)
static

Definition at line 256 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_EndVideo().

◆ qvorbis_info_init

void(* qvorbis_info_init) (vorbis_info *vi) ( vorbis_info * vi)
static

Definition at line 255 of file cap_ogg.c.

Referenced by SCR_CaptureVideo_Ogg_BeginVideo().

◆ th_dll

◆ theorafuncs

dllfunction_t theorafuncs[]
static
Initial value:
=
{
{"theora_info_init", (void **) &qtheora_info_init},
{"theora_info_clear", (void **) &qtheora_info_clear},
{"theora_comment_init", (void **) &qtheora_comment_init},
{"theora_comment_clear", (void **) &qtheora_comment_clear},
{"theora_encode_init", (void **) &qtheora_encode_init},
{"theora_encode_YUVin", (void **) &qtheora_encode_YUVin},
{"theora_encode_packetout", (void **) &qtheora_encode_packetout},
{"theora_encode_header", (void **) &qtheora_encode_header},
{"theora_encode_comment", (void **) &qtheora_encode_comment},
{"theora_encode_tables", (void **) &qtheora_encode_tables},
{"theora_clear", (void **) &qtheora_clear},
{"theora_granule_time", (void **) &qtheora_granule_time},
{"theora_control", (void **) &qtheora_control},
}

Definition at line 488 of file cap_ogg.c.

489{
490 {"theora_info_init", (void **) &qtheora_info_init},
491 {"theora_info_clear", (void **) &qtheora_info_clear},
492 {"theora_comment_init", (void **) &qtheora_comment_init},
493 {"theora_comment_clear", (void **) &qtheora_comment_clear},
494 {"theora_encode_init", (void **) &qtheora_encode_init},
495 {"theora_encode_YUVin", (void **) &qtheora_encode_YUVin},
496 {"theora_encode_packetout", (void **) &qtheora_encode_packetout},
497 {"theora_encode_header", (void **) &qtheora_encode_header},
498 {"theora_encode_comment", (void **) &qtheora_encode_comment},
499 {"theora_encode_tables", (void **) &qtheora_encode_tables},
500 {"theora_clear", (void **) &qtheora_clear},
501 {"theora_granule_time", (void **) &qtheora_granule_time},
502 {"theora_control", (void **) &qtheora_control},
503 {NULL, NULL}
504};

Referenced by SCR_CaptureVideo_Ogg_OpenLibrary().

◆ ve_dll

◆ vo_dll

◆ vorbisencfuncs

dllfunction_t vorbisencfuncs[]
static
Initial value:
=
{
{"vorbis_encode_init_vbr", (void **) &qvorbis_encode_init_vbr},
}

Definition at line 460 of file cap_ogg.c.

461{
462 {"vorbis_encode_init_vbr", (void **) &qvorbis_encode_init_vbr},
463 {NULL, NULL}
464};

Referenced by SCR_CaptureVideo_Ogg_OpenLibrary().

◆ vorbisfuncs

dllfunction_t vorbisfuncs[]
static
Initial value:
=
{
{"vorbis_info_init", (void **) &qvorbis_info_init},
{"vorbis_info_clear", (void **) &qvorbis_info_clear},
{"vorbis_comment_init", (void **) &qvorbis_comment_init},
{"vorbis_comment_clear", (void **) &qvorbis_comment_clear},
{"vorbis_block_init", (void **) &qvorbis_block_init},
{"vorbis_block_clear", (void **) &qvorbis_block_clear},
{"vorbis_dsp_clear", (void **) &qvorbis_dsp_clear},
{"vorbis_analysis_init", (void **) &qvorbis_analysis_init},
{"vorbis_commentheader_out", (void **) &qvorbis_commentheader_out},
{"vorbis_analysis_headerout", (void **) &qvorbis_analysis_headerout},
{"vorbis_analysis_buffer", (void **) &qvorbis_analysis_buffer},
{"vorbis_analysis_wrote", (void **) &qvorbis_analysis_wrote},
{"vorbis_analysis_blockout", (void **) &qvorbis_analysis_blockout},
{"vorbis_analysis", (void **) &qvorbis_analysis},
{"vorbis_bitrate_addblock", (void **) &qvorbis_bitrate_addblock},
{"vorbis_bitrate_flushpacket", (void **) &qvorbis_bitrate_flushpacket},
{"vorbis_granule_time", (void **) &qvorbis_granule_time},
}
static int(* qvorbis_commentheader_out)(vorbis_comment *vc, ogg_packet *op)
Definition cap_ogg.c:269

Definition at line 466 of file cap_ogg.c.

467{
468 {"vorbis_info_init", (void **) &qvorbis_info_init},
469 {"vorbis_info_clear", (void **) &qvorbis_info_clear},
470 {"vorbis_comment_init", (void **) &qvorbis_comment_init},
471 {"vorbis_comment_clear", (void **) &qvorbis_comment_clear},
472 {"vorbis_block_init", (void **) &qvorbis_block_init},
473 {"vorbis_block_clear", (void **) &qvorbis_block_clear},
474 {"vorbis_dsp_clear", (void **) &qvorbis_dsp_clear},
475 {"vorbis_analysis_init", (void **) &qvorbis_analysis_init},
476 {"vorbis_commentheader_out", (void **) &qvorbis_commentheader_out},
477 {"vorbis_analysis_headerout", (void **) &qvorbis_analysis_headerout},
478 {"vorbis_analysis_buffer", (void **) &qvorbis_analysis_buffer},
479 {"vorbis_analysis_wrote", (void **) &qvorbis_analysis_wrote},
480 {"vorbis_analysis_blockout", (void **) &qvorbis_analysis_blockout},
481 {"vorbis_analysis", (void **) &qvorbis_analysis},
482 {"vorbis_bitrate_addblock", (void **) &qvorbis_bitrate_addblock},
483 {"vorbis_bitrate_flushpacket", (void **) &qvorbis_bitrate_flushpacket},
484 {"vorbis_granule_time", (void **) &qvorbis_granule_time},
485 {NULL, NULL}
486};

Referenced by SCR_CaptureVideo_Ogg_OpenLibrary().