X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=cap_ogg.c;h=e9abc7ae573fa143a1be388d64f3a64466451291;hb=563fb48299f453ecb3b81168079df8d30c0ac311;hp=eef3f90d6e3503b5febb2172d58ca318915a6389;hpb=ffa2dfcb8f656bce0555cb4c2e08a4bc9315c4e9;p=xonotic%2Fdarkplaces.git diff --git a/cap_ogg.c b/cap_ogg.c index eef3f90d..e9abc7ae 100644 --- a/cap_ogg.c +++ b/cap_ogg.c @@ -523,7 +523,7 @@ static dllfunction_t theorafuncs[] = static dllhandle_t og_dll = NULL, vo_dll = NULL, ve_dll = NULL, th_dll = NULL; -qboolean SCR_CaptureVideo_Ogg_OpenLibrary(void) +static qboolean SCR_CaptureVideo_Ogg_OpenLibrary(void) { const char* dllnames_og [] = { @@ -677,7 +677,7 @@ static void SCR_CaptureVideo_Ogg_Interleave(void) format->videopage.len = pg.header_len + pg.body_len; format->videopage.time = qtheora_granule_time(&format->ts, qogg_page_granulepos(&pg)); if(format->videopage.len > sizeof(format->videopage.data)) - Host_Error("video page too long"); + Sys_Error("video page too long"); memcpy(format->videopage.data, pg.header, pg.header_len); memcpy(format->videopage.data + pg.header_len, pg.body, pg.body_len); } @@ -687,7 +687,7 @@ static void SCR_CaptureVideo_Ogg_Interleave(void) format->audiopage.len = pg.header_len + pg.body_len; format->audiopage.time = qvorbis_granule_time(&format->vd, qogg_page_granulepos(&pg)); if(format->audiopage.len > sizeof(format->audiopage.data)) - Host_Error("audio page too long"); + Sys_Error("audio page too long"); memcpy(format->audiopage.data, pg.header, pg.header_len); memcpy(format->audiopage.data + pg.header_len, pg.body, pg.body_len); } @@ -782,7 +782,7 @@ static void SCR_CaptureVideo_Ogg_EndVideo(void) while (1) { int result = qogg_stream_flush (&format->to, &pg); if (result < 0) - fprintf (stderr, "Internal Ogg library error.\n"); // TODO Host_Error + fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error if (result <= 0) break; FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len); @@ -794,7 +794,7 @@ static void SCR_CaptureVideo_Ogg_EndVideo(void) while (1) { int result = qogg_stream_flush (&format->vo, &pg); if (result < 0) - fprintf (stderr, "Internal Ogg library error.\n"); // TODO Host_Error + fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error if (result <= 0) break; FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len); @@ -828,7 +828,7 @@ static void SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV(void) yuv_buffer *yuv; int x, y; int blockr, blockg, blockb; - unsigned char *b = cls.capturevideo.outbuffer; + unsigned char *b; int w = cls.capturevideo.width; int h = cls.capturevideo.height; int inpitch = w*4; @@ -847,7 +847,7 @@ static void SCR_CaptureVideo_Ogg_ConvertFrame_BGRA_to_YUV(void) b += 4; } - if((y & 1) == 0) + if ((y & 1) == 0 && y/2 < h/2) // if h is odd, this skips the last row { for(b = cls.capturevideo.outbuffer + (h-2-y)*w*4, x = 0; x < w/2; ++x) { @@ -914,14 +914,14 @@ static void SCR_CaptureVideo_Ogg_SoundFrame(const portable_sampleframe_t *paintb ogg_packet pt; int *map = mapping[bound(1, cls.capturevideo.soundchannels, 8) - 1]; - vorbis_buffer = qvorbis_analysis_buffer(&format->vd, length); + vorbis_buffer = qvorbis_analysis_buffer(&format->vd, (int)length); for(j = 0; j < cls.capturevideo.soundchannels; ++j) { float *b = vorbis_buffer[map[j]]; for(i = 0; i < length; ++i) - b[i] = paintbuffer[i].sample[j] / 32768.0f; + b[i] = paintbuffer[i].sample[j]; } - qvorbis_analysis_wrote(&format->vd, length); + qvorbis_analysis_wrote(&format->vd, (int)length); while(qvorbis_analysis_blockout(&format->vd, &format->vb) == 1) { @@ -937,9 +937,10 @@ static void SCR_CaptureVideo_Ogg_SoundFrame(const portable_sampleframe_t *paintb void SCR_CaptureVideo_Ogg_BeginVideo(void) { + char vabuf[1024]; cls.capturevideo.format = CAPTUREVIDEOFORMAT_OGG_VORBIS_THEORA; cls.capturevideo.formatextension = "ogv"; - cls.capturevideo.videofile = FS_OpenRealFile(va("%s.%s", cls.capturevideo.basename, cls.capturevideo.formatextension), "wb", false); + cls.capturevideo.videofile = FS_OpenRealFile(va(vabuf, sizeof(vabuf), "%s.%s", cls.capturevideo.basename, cls.capturevideo.formatextension), "wb", false); cls.capturevideo.endvideo = SCR_CaptureVideo_Ogg_EndVideo; cls.capturevideo.videoframes = SCR_CaptureVideo_Ogg_VideoFrames; cls.capturevideo.soundframe = SCR_CaptureVideo_Ogg_SoundFrame; @@ -1098,7 +1099,7 @@ void SCR_CaptureVideo_Ogg_BeginVideo(void) { int result = qogg_stream_flush (&format->to, &pg); if (result < 0) - fprintf (stderr, "Internal Ogg library error.\n"); // TODO Host_Error + fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error if (result <= 0) break; FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len); @@ -1110,7 +1111,7 @@ void SCR_CaptureVideo_Ogg_BeginVideo(void) { int result = qogg_stream_flush (&format->vo, &pg); if (result < 0) - fprintf (stderr, "Internal Ogg library error.\n"); // TODO Host_Error + fprintf (stderr, "Internal Ogg library error.\n"); // TODO Sys_Error if (result <= 0) break; FS_Write(cls.capturevideo.videofile, pg.header, pg.header_len);