comparison libmpcodecs/vd_real.c @ 6345:2b6ff13acf5b

- removed unused function pointers - fixed codec id/subid for rv30 (no more hardcoded values) - rv20 support
author arpi
date Sun, 09 Jun 2002 01:08:33 +0000
parents d79c52610702
children 66dd95953ec2
comparison
equal deleted inserted replaced
6344:ecb9d82d1b64 6345:2b6ff13acf5b
28 ulong (*rvyuv_custom_message)(ulong,ulong); 28 ulong (*rvyuv_custom_message)(ulong,ulong);
29 ulong (*rvyuv_free)(ulong); 29 ulong (*rvyuv_free)(ulong);
30 ulong (*rvyuv_hive_message)(ulong,ulong); 30 ulong (*rvyuv_hive_message)(ulong,ulong);
31 ulong (*rvyuv_init)(ulong,ulong); 31 ulong (*rvyuv_init)(ulong,ulong);
32 ulong (*rvyuv_transform)(ulong,ulong,ulong,ulong,ulong); 32 ulong (*rvyuv_transform)(ulong,ulong,ulong,ulong,ulong);
33 ulong (*rvyuv_rnfru_free)(ulong);
34 ulong (*rvyuv_rnfru_get_frame)(ulong,ulong,ulong);
35 ulong (*rvyuv_rnfru_init)(ulong,ulong,ulong);
36 ulong (*rvyuv_rnfru_setup)(ulong,ulong,ulong,ulong,ulong,ulong,ulong,ulong);
37 33
38 void *rv_handle=NULL; 34 void *rv_handle=NULL;
39 35
40 void *__builtin_vec_new(unsigned long size) { 36 void *__builtin_vec_new(unsigned long size) {
41 return malloc(size); 37 return malloc(size);
63 return CONTROL_UNKNOWN; 59 return CONTROL_UNKNOWN;
64 } 60 }
65 61
66 /* exits program when failure */ 62 /* exits program when failure */
67 int load_syms(char *path) { 63 int load_syms(char *path) {
68 fputs("loadSyms()\n", stderr);
69 if (1) {
70 void *handle; 64 void *handle;
71 char *error; 65 char *error;
72 66
73 fprintf(stderr, "opening dll %s\n", path); 67 fprintf(stderr, "opening dll %s\n", path);
74 rv_handle = dlopen (path, RTLD_LAZY); 68 rv_handle = dlopen (path, RTLD_LAZY);
101 rvyuv_transform = dlsym(handle, "RV20toYUV420Transform"); 95 rvyuv_transform = dlsym(handle, "RV20toYUV420Transform");
102 if ((error = dlerror()) != NULL) { 96 if ((error = dlerror()) != NULL) {
103 fprintf (stderr, "dlsym(rvyuvTransform): %s\n", error); 97 fprintf (stderr, "dlsym(rvyuvTransform): %s\n", error);
104 return 0; 98 return 0;
105 } 99 }
106 rvyuv_rnfru_free = dlsym(handle, "RV20toYUV420_RN_FRU_Free");
107 if ((error = dlerror()) != NULL) {
108 fprintf (stderr, "dlsym(rvyuvRNFRUFree): %s\n", error);
109 return 0;
110 }
111 rvyuv_rnfru_get_frame = dlsym(handle, "RV20toYUV420_RN_FRU_GetFrame");
112 if ((error = dlerror()) != NULL) {
113 fprintf (stderr, "dlsym(rvyuvRNFRUGetFrame): %s\n", error);
114 return 0;
115 }
116 rvyuv_rnfru_init = dlsym(handle, "RV20toYUV420_RN_FRU_Init");
117 if ((error = dlerror()) != NULL) {
118 fprintf (stderr, "dlsym(rvyuvRNFRUInit): %s\n", error);
119 return 0;
120 }
121 rvyuv_rnfru_setup = dlsym(handle, "RV20toYUV420_RN_FRU_Setup");
122 if ((error = dlerror()) != NULL) {
123 fprintf (stderr, "dlsym(rvyuvRNFRUSetup): %s\n", error);
124 return 0;
125 }
126
127 }
128 return 1; 100 return 1;
129 } 101 }
130 102
131 /* we need exact positions */ 103 /* we need exact positions */
132 struct rv_init_t { 104 struct rv_init_t {
133 short unk1; 105 short unk1;
134 short w; 106 short w;
135 short h; 107 short h;
136 short unk3; 108 short unk3;
137 int unk2; 109 int unk2;
138 int unk4; 110 int subformat;
139 int unk5; 111 int unk5;
140 int format; 112 int format;
141 } rv_init_t; 113 } rv_init_t;
142 114
143 // init driver 115 // init driver
144 static int init(sh_video_t *sh){ 116 static int init(sh_video_t *sh){
145 //unsigned int out_fmt; 117 //unsigned int out_fmt;
146 char path[4096]; 118 char path[4096];
147 int result; 119 int result;
148 ulong cmsg24[4]={sh->disp_w,sh->disp_h,sh->disp_w,sh->disp_h}; 120 // we export codec id and sub-id from demuxer in bitmapinfohdr:
149 ulong cmsg_data[3]={0x24,2,&cmsg24}; 121 unsigned int* extrahdr=(unsigned int*)(sh->bih+1);
150 struct rv_init_t init_data={ 122 struct rv_init_t init_data={
151 // 11, sh->disp_w, sh->disp_h,0,0,0x01099030, 123 11, sh->disp_w, sh->disp_h,0,0,extrahdr[0],
152 11, sh->disp_w, sh->disp_h,0,0,0x00099030, 124 1,extrahdr[1]}; // rv30
153 // 1,0x30202002}; 125
154 1,0x30203002}; 126 mp_msg(MSGT_DECVIDEO,MSGL_V,"realvideo codec id: 0x%08X sub-id: 0x%08X\n",extrahdr[1],extrahdr[0]);
155 127
156 sprintf(path, LIBDIR "/real/%s", sh->codec->dll); 128 sprintf(path, LIBDIR "/real/%s", sh->codec->dll);
157 if(!load_syms(path)){ 129 if(!load_syms(path)){
158 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_MissingDLLcodec,sh->codec->dll); 130 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_MissingDLLcodec,sh->codec->dll);
159 mp_msg(MSGT_DECVIDEO,MSGL_HINT,"You need to copy the contents of the codecs directory from RealPlayer8\n"); 131 mp_msg(MSGT_DECVIDEO,MSGL_HINT,"You need to copy the contents of the codecs directory from RealPlayer8\n");
167 result=(*rvyuv_init)(&init_data, &sh->context); 139 result=(*rvyuv_init)(&init_data, &sh->context);
168 if (result){ 140 if (result){
169 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Couldn't open RealVideo codec, error code: 0x%X \n",result); 141 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Couldn't open RealVideo codec, error code: 0x%X \n",result);
170 return 0; 142 return 0;
171 } 143 }
172 // setup codec: 144 // setup rv30 codec (codec sub-type and image dimensions):
173 // realvid_hmsg(sh,0,2,0); 145 if(extrahdr[1]>=0x30000000){
174 (*rvyuv_custom_message)(cmsg_data,sh->context); 146 ulong cmsg24[4]={sh->disp_w,sh->disp_h,sh->disp_w,sh->disp_h};
147 ulong cmsg_data[3]={0x24,1+((extrahdr[0]>>16)&3),&cmsg24};
148 (*rvyuv_custom_message)(cmsg_data,sh->context);
149 }
175 mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: RealVideo codec init OK!\n"); 150 mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: RealVideo codec init OK!\n");
176 return 1; 151 return 1;
177 } 152 }
178 153
179 // uninit driver 154 // uninit driver
180 static void uninit(sh_video_t *sh){ 155 static void uninit(sh_video_t *sh){
181 // realvid_exit(); 156 if(rv_handle) dlclose(rv_handle);
157 rv_handle=NULL;
182 } 158 }
183
184 //mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
185 159
186 // decode a frame 160 // decode a frame
187 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ 161 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
188 mp_image_t* mpi; 162 mp_image_t* mpi;
189 ulong result; 163 ulong result;