X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cl_video.c;h=130a58ffd3ce5ca4b552b7ccc8686ce6299c32af;hp=1afbb87fb8c468e96bb3c272afc00d5716703859;hb=3aadac36c2aa86365586a589bf1910d895122a0e;hpb=668a437d46dfad040c8e32398fd7cb916345f7d1 diff --git a/cl_video.c b/cl_video.c index 1afbb87f..130a58ff 100644 --- a/cl_video.c +++ b/cl_video.c @@ -20,18 +20,12 @@ int cl_videoimagedata_bmask; int cl_videoimagedata_bytesperpixel; void *cl_videoimagedata; -int cl_videosoundrate; -int cl_videosoundlength; -short *cl_videosounddata; -int cl_videosoundresamplelength; -short *cl_videosoundresampledata; - rtexture_t *cl_videotexture; rtexturepool_t *cl_videotexturepool; void CL_VideoFrame(void) { - int frames, framenum, samples, s; + int frames, framenum; if (!cl_videoplaying) return; framenum = (realtime - cl_videostarttime) * cl_videoframerate; @@ -54,35 +48,6 @@ void CL_VideoFrame(void) R_UpdateTexture(cl_videotexture, cl_videoimagedata); //Draw_NewPic("engine_videoframe", cl_videoimagewidth, cl_videoimageheight, false, cl_videoimagedata); } - if (cl_videosoundrate && (samples = S_RawSamples_QueueWantsMore())) - { - Con_Printf("%i = S_RawSamples_QueueWantsMore()\n", samples); - - // calculate how much source data we need to fill the output... - s = samples * cl_videosoundrate / shm->speed; - - // reallocate processing buffer if needed - if (cl_videosoundresamplelength < samples) - { - cl_videosoundresamplelength = samples + 100; - if (cl_videosoundresampledata) - Mem_Free(cl_videosoundresampledata); - cl_videosoundresampledata = Mem_Alloc(clvideomempool, cl_videosoundresamplelength * sizeof(short[2])); - } - - // reallocate loading buffer if needed - if (cl_videosoundlength < s) - { - cl_videosoundlength = s + 100; - if (cl_videosounddata) - Mem_Free(cl_videosounddata); - cl_videosounddata = Mem_Alloc(clvideomempool, cl_videosoundlength * sizeof(short[2])); - } - - dpvsimpledecode_audio(cl_videostream, cl_videosounddata, s); - S_ResampleBuffer16Stereo(cl_videosounddata, s, cl_videosoundresampledata, samples); - S_RawSamples_Enqueue(cl_videosoundresampledata, samples); - } } void CL_DrawVideo(void) @@ -90,65 +55,31 @@ void CL_DrawVideo(void) if (cl_videoplaying) { drawqueuemesh_t mesh; - int indices[6]; - float vertices[12]; - float texcoords[8]; - qbyte colorsb[16]; + float vertex3f[12]; + float texcoord2f[8]; + float color4f[16]; float s1, t1, s2, t2, x1, y1, x2, y2; - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - indices[3] = 0; - indices[4] = 2; - indices[5] = 3; x1 = 0; y1 = 0; x2 = vid.conwidth; y2 = vid.conheight; - vertices[0] = y1; - vertices[1] = y1; - vertices[2] = 0; - vertices[3] = x2; - vertices[4] = y1; - vertices[5] = 0; - vertices[6] = x2; - vertices[7] = y2; - vertices[8] = 0; - vertices[9] = x1; - vertices[10] = y2; - vertices[11] = 0; R_FragmentLocation(cl_videotexture, NULL, NULL, &s1, &t1, &s2, &t2); - texcoords[0] = s1; - texcoords[1] = t1; - texcoords[2] = s2; - texcoords[3] = t1; - texcoords[4] = s2; - texcoords[5] = t2; - texcoords[6] = s1; - texcoords[7] = t2; - colorsb[0] = 255 >> v_overbrightbits.integer; - colorsb[1] = 255 >> v_overbrightbits.integer; - colorsb[2] = 255 >> v_overbrightbits.integer; - colorsb[3] = 255; - colorsb[4] = 255 >> v_overbrightbits.integer; - colorsb[5] = 255 >> v_overbrightbits.integer; - colorsb[6] = 255 >> v_overbrightbits.integer; - colorsb[7] = 255; - colorsb[8] = 255 >> v_overbrightbits.integer; - colorsb[9] = 255 >> v_overbrightbits.integer; - colorsb[10] = 255 >> v_overbrightbits.integer; - colorsb[11] = 255; - colorsb[12] = 255 >> v_overbrightbits.integer; - colorsb[13] = 255 >> v_overbrightbits.integer; - colorsb[14] = 255 >> v_overbrightbits.integer; - colorsb[15] = 255; + texcoord2f[0] = s1;texcoord2f[1] = t1; + texcoord2f[2] = s2;texcoord2f[3] = t1; + texcoord2f[4] = s2;texcoord2f[5] = t2; + texcoord2f[6] = s1;texcoord2f[7] = t2; + R_FillColors(color4f, 4, 1, 1, 1, 1); + vertex3f[ 0] = x1;vertex3f[ 1] = y1;vertex3f[ 2] = 0; + vertex3f[ 3] = x2;vertex3f[ 4] = y1;vertex3f[ 5] = 0; + vertex3f[ 6] = x2;vertex3f[ 7] = y2;vertex3f[ 8] = 0; + vertex3f[ 9] = x1;vertex3f[10] = y2;vertex3f[11] = 0; mesh.texture = cl_videotexture; - mesh.numindices = 6; - mesh.numvertices = 4; - mesh.indices = indices; - mesh.vertices = vertices; - mesh.texcoords = texcoords; - mesh.colors = colorsb; + mesh.num_triangles = 2; + mesh.num_vertices = 4; + mesh.data_element3i = polygonelements; + mesh.data_vertex3f = vertex3f; + mesh.data_texcoord2f = texcoord2f; + mesh.data_color4f = color4f; DrawQ_Mesh(&mesh, 0); //DrawQ_Pic(0, 0, "engine_videoframe", vid.conwidth, vid.conheight, 1, 1, 1, 1, 0); } @@ -179,22 +110,14 @@ void CL_VideoStart(char *filename) cl_videoimagedata = Mem_Alloc(clvideomempool, cl_videoimagewidth * cl_videoimageheight * cl_videoimagedata_bytesperpixel); //memset(cl_videoimagedata, 97, cl_videoimagewidth * cl_videoimageheight * cl_videoimagedata_bytesperpixel); - cl_videosoundrate = dpvsimpledecode_getsoundrate(cl_videostream); - cl_videosoundlength = 0; - cl_videosounddata = NULL; - cl_videosoundresamplelength = 0; - cl_videosoundresampledata = NULL; - cl_videotexturepool = R_AllocTexturePool(); - cl_videotexture = R_LoadTexture(cl_videotexturepool, "videotexture", cl_videoimagewidth, cl_videoimageheight, NULL, TEXTYPE_RGBA, TEXF_FRAGMENT); + cl_videotexture = R_LoadTexture2D(cl_videotexturepool, "videotexture", cl_videoimagewidth, cl_videoimageheight, NULL, TEXTYPE_RGBA, TEXF_FRAGMENT, NULL); } void CL_VideoStop(void) { cl_videoplaying = false; - S_RawSamples_ClearQueue(); - if (cl_videostream) dpvsimpledecode_close(cl_videostream); cl_videostream = NULL; @@ -203,14 +126,6 @@ void CL_VideoStop(void) Mem_Free(cl_videoimagedata); cl_videoimagedata = NULL; - if (cl_videosounddata) - Mem_Free(cl_videosounddata); - cl_videosounddata = NULL; - - if (cl_videosoundresampledata) - Mem_Free(cl_videosoundresampledata); - cl_videosoundresampledata = NULL; - cl_videotexture = NULL; R_FreeTexturePool(&cl_videotexturepool); @@ -223,11 +138,11 @@ static void CL_PlayVideo_f(void) if (Cmd_Argc() != 2) { - Con_Printf ("usage: playvideo \nplays video named video/.dpv\n"); + Con_Print("usage: playvideo \nplays video named video/.dpv\n"); return; } - sprintf(name, "%s/video/%s.dpv", com_gamedir, Cmd_Argv(1)); + sprintf(name, "video/%s.dpv", Cmd_Argv(1)); CL_VideoStart(name); } @@ -241,5 +156,5 @@ void CL_Video_Init(void) Cmd_AddCommand("playvideo", CL_PlayVideo_f); Cmd_AddCommand("stopvideo", CL_StopVideo_f); - clvideomempool = Mem_AllocPool("CL_Video"); + clvideomempool = Mem_AllocPool("CL_Video", 0, NULL); }