Mercurial > mplayer.hg
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; |