All pastes #1743679 Raw Edit

C

public c v1 · immutable
#1743679 ·published 2010-01-09 04:42 UTC
rendered paste body
#define _GNU_SOURCE#include <dlfcn.h>#include <stdio.h>#include <stdlib.h>#include <gst/gst.h>#include <stdarg.h>#include <time.h>#include "common.h"#include "storage.h"#include "xine_interface.h"char BUFFER_filename[BUFFER_SIZE];static session new;static item *list;//fprintf(stderr,"Gstreamer -> Xine Audio Plugin\t Vikram Ambrose 2008\n"); int get_stamp(){	return (int)rand()&0xff;//	return time(NULL);}// file:///home/music/BVSC/Omara%20Portuondo/Buena%20Vista%20Social%20Club%20Presents%20Omara%20Portuondo/03%20-%20Donde%20Estabas%20T%C3%BA%3F.ogg//  g_object_set (G_OBJECT (source), "location", argv[1], NULL);//void (*REAL_g_object_set) (gpointer object, const gchar *first_property_name, ...)=NULL;void g_object_set (gpointer object, const gchar *first_property_name, ...){	va_list ap;	char *ptr;	char *msg;	fprintf(stderr,"libGst2XineAudio.so : wrapping g_object_set\n");	fprintf(stderr,"libGst2XineAudio.so : g_object_set : first_property_name = %s\n",first_property_name);	va_start(ap, first_property_name);	if( strstr(first_property_name,"location") || strstr(first_property_name,"uri") ){		ptr = va_arg(ap, char *);		snprintf(BUFFER_filename,BUFFER_SIZE,"%s",ptr);		new.p_url = BUFFER_filename;		fprintf(stderr,"libGst2XineAudio.so : g_object_set : filename = %s\n",BUFFER_filename);		va_end(ap);		va_start(ap, first_property_name);	}	REAL_g_object_set = dlsym(RTLD_NEXT,"g_object_set_valist");	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : g_object_set : dlopen failed : %s\n", msg);		exit(1);	} else {		fprintf(stderr,"libGst2XineAudio.so : REAL_%s = %p\n","g_object_set_valist", REAL_g_object_set);	}	REAL_g_object_set(object,first_property_name,ap);	va_end(ap);	return;}void my_main(){	if (new.main != 1){		fprintf(stderr,"libGst2XineAudio.so : Main : 1st time\n");		new.main = 1;	}else {		fprintf(stderr,"libGst2XineAudio.so : Main : Re-exec\n");	}	if(new.state == PLAY){		fprintf(stderr,"libGst2XineAudio.so : Main : new.state = PLAY\n");		SESSION_init(&new);		XINE_play(&new,10000,XINE_SPEED_NORMAL);	}else if (new.state == PLAYING){		fprintf(stderr,"libGst2XineAudio.so : Main : new.state = PLAYING\n");	}else {		fprintf(stderr,"libGst2XineAudio.so : Main : new.state = OTHER\n");		//SESSION_init(&new);	}}//g_main_loop_run (loop);void (*REAL_g_main_loop_run)(GMainLoop *loop) = NULL;void g_main_loop_run(GMainLoop *loop){	char *msg;	fprintf(stderr,"libGst2XineAudio.so : wrapping g_main_loop_run\n");	fprintf(stderr,"libGst2XineAudio.so : g_main_loop_run : filename = %s\n",new.p_url);	REAL_g_main_loop_run = dlsym(RTLD_NEXT,"g_main_loop_run");	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : g_main_loop_run : dlopen failed : %s\n", msg);		exit(1);	} else {		fprintf(stderr,"libGst2XineAudio.so : REAL_%s = %p\n","g_main_loop_run", REAL_g_main_loop_run);	}	my_main();	REAL_g_main_loop_run(loop);}GstStateChangeReturn (*REAL_gst_element_set_state) (GstElement *element, GstState state) = NULL;GstStateChangeReturn gst_element_set_state (GstElement *element, GstState state){	const char *name = "gst_element_set_state";	char *msg;	GstStateChangeReturn rv;	GstState old_state;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);//	gst_element_get_state(element,&old_state,NULL,GST_CLOCK_TIME_NONE);//	fprintf(stderr,"%i libGst2XineAudio.so : %s : Cur State -> %s\n",stamp,name,gst_element_state_get_name(old_state));	fprintf(stderr,"%i libGst2XineAudio.so : %s : Set State -> %s %4.4x\n",stamp,name,gst_element_state_get_name(state),state);	REAL_gst_element_set_state = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_element_set_state);	}	set(&list,element,state);	if(state==GST_STATE_PLAYING){		if(!new.url){			fprintf(stderr,"asked to play without being set\n");		}else {			//if(new.state == PLAY){				XINE_play(&new,10000,XINE_SPEED_NORMAL);				rv = state;			//}else {			//	new.state = PLAY;			//}		}		}else if (state== GST_STATE_PAUSED){		XINE_play(&new,10000,XINE_SPEED_PAUSE);	}else if (state == GST_STATE_READY){ // this is kinda like unpause, i think?		XINE_play(&new,10000,XINE_SPEED_NORMAL);	}else {		fprintf(stderr,"libGst2XineAudio.so : gst_element_set_state : state = %4.4x\n",state);	}//	REAL_gst_element_set_state(element,state);	rv=  GST_STATE_CHANGE_SUCCESS;	fprintf(stderr,"%i libGst2XineAudio.so : %s : Return State = %s %4.4x\n",stamp,name,gst_element_state_get_name(rv),rv);	return rv;}GstStateChangeReturn (*REAL_gst_element_get_state)(GstElement *element, GstState *state, GstState *pending, GstClockTime timeout) = NULL;GstStateChangeReturn gst_element_get_state(GstElement *element, GstState *state, GstState *pending, GstClockTime timeout){	const char *name = "gst_element_get_state";	char *msg;	GstStateChangeReturn rv;	GstState old_state;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);//	fprintf(stderr,"%i libGst2XineAudio.so : %s : Get State -> %s %4.4x\n",stamp,name,gst_element_state_get_name(state),state);	REAL_gst_element_set_state = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_element_get_state);	}	*state = get(&list,element);//	rv =  REAL_gst_element_get_state(element,state,pending,timeout);	rv = GST_STATE_CHANGE_SUCCESS;	return rv;}gboolean (*REAL_gst_element_query_duration) (GstElement *element, GstFormat *format, gint64 *duration)= NULL;gboolean gst_element_query_duration (GstElement *element, GstFormat *format, gint64 *duration){	const char *name = "gst_element_query_duration";	char *msg;	int stamp = get_stamp();	int rv;	unsigned int answer;	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);	fprintf(stderr,"%i libGst2XineAudio.so : %s : format = %4.4x\n",stamp,name,*format);	/*	REAL_gst_element_query_duration = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_element_set_state);	}*/	// GST has inverse logic, ie 1 = good, 0 = bad	rv = !XINE_get_duration(&new,(int*)duration);	switch(*format){	case GST_FORMAT_TIME: // in nano secs		answer = (*duration * 1000);		fprintf(stderr,"%i libGst2XineAudio.so : %s : time (ns)  = %i\n",stamp,name,answer);		break;	case GST_FORMAT_BYTES: 			answer = get_file_size(new.p_url); 		fprintf(stderr,"%i libGst2XineAudio.so : %s : size (bytes)  = %u\n",stamp,name,answer);		break;	default:		fprintf(stderr,"%i libGst2XineAudio.so : %s : Unknown Implemented Format\n",stamp,name);		break;	}	*duration=answer;		return rv;}//gst_element_make_from_uriGstElement* (*REAL_gst_element_make_from_uri)(const GstURIType type,const gchar *uri, const gchar *elementname)=NULL;GstElement* gst_element_make_from_uri(const GstURIType type,const gchar *uri, const gchar *elementname){	const char *name = "gst_element_make_from_uri";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);	fprintf(stderr,"%i libGst2XineAudio.so : %s : uri = %s\n",stamp,name,uri);	snprintf(BUFFER_filename,BUFFER_SIZE,"%s",uri);	new.p_url = BUFFER_filename;	REAL_gst_element_make_from_uri = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_element_make_from_uri);	}	return REAL_gst_element_make_from_uri(type,uri,elementname); 	}const gchar* (*REAL_gst_structure_get_name)(const GstStructure *structure)= NULL;const gchar* gst_structure_get_name (const GstStructure *structure){	const char *name = "gst_structure_get_name";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);	fprintf(stderr,"%i libGst2XineAudio.so : %s : structure->type = %4.4x\n",stamp,name,(int)structure->type);	REAL_gst_structure_get_name = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_structure_get_name);	}	return REAL_gst_structure_get_name(structure); 	}GstStructure* (*REAL_gst_caps_get_structure)(const GstCaps *caps, guint index) = NULL;GstStructure* gst_caps_get_structure(const GstCaps *caps, guint index){	const char *name = "gst_caps_get_structure";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);	fprintf(stderr,"%i libGst2XineAudio.so : %s : index = %4.4x\n",stamp,name,index);	REAL_gst_caps_get_structure = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_caps_get_structure);	}	return REAL_gst_caps_get_structure(caps,index); 	}GstElement* (*REAL_gst_bin_get_by_name)(GstBin *bin, const gchar *name) = NULL;GstElement* gst_bin_get_by_name(GstBin *bin, const gchar *name){	const char *_name = "gst_bin_get_by_name";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,_name);	fprintf(stderr,"%i libGst2XineAudio.so : %s : name = %s\n",stamp,_name,name);	REAL_gst_bin_get_by_name = dlsym(RTLD_NEXT,_name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",_name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,_name, REAL_gst_bin_get_by_name);	}	return REAL_gst_bin_get_by_name(bin,name); 	}gboolean (*REAL_gst_caps_is_any)(const GstCaps *caps) =NULL;gboolean gst_caps_is_any (const GstCaps *caps){	const char *name = "gst_caps_is_any";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);	//fprintf(stderr,"%i libGst2XineAudio.so : %s : caps = %s\n",stamp,name,gst_caps_to_string (caps));	REAL_gst_caps_is_any = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_caps_is_any);	}	return REAL_gst_caps_is_any(caps); 	}gboolean (*REAL_gst_caps_is_empty)(const GstCaps *caps) = NULL;gboolean gst_caps_is_empty (const GstCaps *caps){	const char *name = "gst_caps_is_empty";	char *msg;	int stamp = get_stamp();	fprintf(stderr,"%i libGst2XineAudio.so : wrapping %s\n",stamp,name);//	fprintf(stderr,"%i libGst2XineAudio.so : %s : caps = %s\n",stamp,name,gst_caps_to_string (caps));	REAL_gst_caps_is_empty = dlsym(RTLD_NEXT,name);	if ((msg = dlerror()) != NULL) {		fprintf(stderr,"libGst2XineAudio.so : %s : dlopen failed : %s\n",name, msg);		exit(1);	} else {		fprintf(stderr,"%i libGst2XineAudio.so : REAL_%s = %p\n",stamp,name, REAL_gst_caps_is_empty);	}	return REAL_gst_caps_is_empty(caps); 	}