185#include <system_threads.h>
188#include "vrml_parser/CRoutes.h"
189#include "vrml_parser/Structs.h"
190#include "main/ProdCon.h"
191#include "../opengl/OpenGL_Utils.h"
192#include "../opengl/Textures.h"
193#include "../opengl/LoadTextures.h"
194#include "../scenegraph/Component_CubeMapTexturing.h"
202#include <libFreeWRL.h>
217#ifdef MOVIETEXTURE_BERKLEYBROWN
218#include "MPEG_Utils_berkley.c"
219#elif MOVIETEXTURE_FFMPEG
221int movie_load_from_file(
char *fname,
void **opaque);
222double movie_get_duration(
void *opaque);
223unsigned char *movie_get_frame_by_fraction(
void *opaque,
float fraction,
int *width,
int *height,
int *nchan);
224unsigned char * movie_get_audio_PCM_buffer(
void *opaque,
int *freq,
int *channels,
int *size,
int *bits);
238#define LOAD_STABLE 10
239#elif MOVIETEXTURE_LIBMPEG2
242bool movie_load(resource_item_t *res){
266#ifdef MOVIETEXTURE_STUB
267 res->status = ress_loaded;
269#elif MOVIETEXTURE_BERKLEYBROWN
271 int x,y,depth,frameCount;
277 mpg_main(res->actual_file, &x,&y,&depth,&frameCount,&ptr);
279 printf (
"have x %d y %d depth %d frameCount %d ptr %d\n",x,y,depth,frameCount,ptr);
287#elif MOVIETEXTURE_FFMPEG
291 loaded = movie_load_from_file(res->actual_file,&opaque);
292 retval = loaded > -1 ? TRUE : FALSE;
294 int freq,channels,size,bits;
295 unsigned char * pcmbuf;
298 res->status = ress_loaded;
299 res->complete = TRUE;
300 res->status = ress_parsed;
304 node->duration_changed = movie_get_duration(opaque);
305 node->__fw_movie = opaque;
306 node->__loadstatus = LOAD_STABLE;
310 MARK_EVENT (X3D_NODE(node), offsetof(
struct X3D_MovieTexture, duration_changed));
313 pcmbuf = movie_get_audio_PCM_buffer(opaque,&freq,&channels,&size,&bits);
319 printf(
"audio freq %d channels %d size %d bits per channel %d\n",freq,channels,size,bits);
321 node->__sourceNumber = libsound_createBusFromPCM(pcmbuf, bits, channels, size, freq);
333 if (!alutInitWithoutContext(NULL, NULL))
334 ConsoleMessage(
"ALUT init failed\n");
341 alGenBuffers(1, &albuffer);
359 format = AL_FORMAT_MONO8;
361 format = AL_FORMAT_STEREO8;
364 format = AL_FORMAT_MONO16;
366 format = AL_FORMAT_STEREO16;
369 #ifdef AL_EXT_float32
370 format = AL_FORMAT_MONO_FLOAT32;
372 format = AL_FORMAT_STEREO_FLOAT32;
380 alBufferData(albuffer,format,pcmbuf,size,freq);
383 node->__sourceNumber = albuffer;
391 printf(
"opqaue = %p, loaded=%d \n",opaque,res->status);
393#elif MOVIETEXTURE_LIBMPEG2
397int parse_audioclip(
struct X3D_AudioClip *node,
char *bbuffer,
int len);
403 int audio_sourcenumber;
404 audio_sourcenumber = -1;
409#ifdef MOVIETEXTURE_STUB
410#elif MOVIETEXTURE_BERKLEYBROWN
411#elif MOVIETEXTURE_FFMPEG
412#elif MOVIETEXTURE_LIBMPEG2
414 return audio_sourcenumber;
416double compute_duration(
int ibuffer);
418bool process_res_movie(resource_item_t *res){
436 buffer = res->URLrequest;
441 of = res->openned_files;
447 buffer = of->fileData;
448 len = of->fileDataSize;
454 node->__sourceNumber = parse_movie(node,buffer,len);
455 if(node->__sourceNumber > -1) {
456 node->duration_changed = compute_duration(node->__sourceNumber);
457 MARK_EVENT (X3D_NODE(node), offsetof(
struct X3D_MovieTexture, duration_changed));
490unsigned char *movietexture_get_frame_by_fraction(
struct X3D_Node* node,
float fraction,
int *width,
int *height,
int *nchan){
491 unsigned char* retval = NULL;
492 if(node && node->_nodeType == NODE_MovieTexture){
494#ifdef MOVIETEXTURE_STUB
495#elif MOVIETEXTURE_BERKLEYBROWN
496#elif MOVIETEXTURE_FFMPEG
497 retval = movie_get_frame_by_fraction(movietexture->__fw_movie,fraction,width,height,nchan);
498#elif MOVIETEXTURE_LIBMPEG2