changeset 2382:c17b7c2f747b

merge
author alex
date Mon, 22 Oct 2001 21:03:25 +0000
parents 448559791c0e
children e13c63bc4151
files xacodec.c
diffstat 1 files changed, 64 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/xacodec.c	Mon Oct 22 20:48:39 2001 +0000
+++ b/xacodec.c	Mon Oct 22 21:03:25 2001 +0000
@@ -13,7 +13,7 @@
 #include <errno.h> /* strerror, errno */
 
 #include "config.h"
-#define XACODEC_PATH "/usr/lib/xanim"
+#define XACODEC_PATH "/usr/lib/xanim/mods"
 
 #include "mp_msg.h"
 #include "bswap.h"
@@ -23,8 +23,6 @@
 #include "codec-cfg.h"
 #include "stheader.h"
 
-//#include "loader/DirectShow/default.h"
-
 #include "libvo/img_format.h"
 #include "xacodec.h"
 
@@ -39,7 +37,6 @@
 #define xaFALSE 0
 #define xaTRUE 1
 
-
 #ifndef RTLD_NOW
 #define RLTD_NOW 2
 #endif
@@ -52,6 +49,9 @@
 
 extern int verbose;
 
+#define XA_CLOSE_FUNCS 5
+int xa_close_func = 0;
+
 typedef struct xacodec_driver
 {
     XA_DEC_INFO *decinfo;
@@ -59,12 +59,11 @@
     long (*iq_func)(XA_CODEC_HDR *codec_hdr);
     unsigned int (*dec_func)(unsigned char *image, unsigned char *delta,
 	unsigned int dsize, XA_DEC_INFO *dec_info);
-    void (*close_func)();
+    void *close_func[XA_CLOSE_FUNCS];
 } xacodec_driver_t;
 
 xacodec_driver_t *xacodec_driver = NULL;
 
-
 /* Needed by XAnim DLLs */
 int XA_Print(char *fmt, ...)
 {
@@ -77,11 +76,23 @@
     va_end(vallist);
 }
 
+/* 0 is no debug (needed by 3ivX) */
+long xa_debug = 2;
+
 int TheEnd1(char *err_mess)
 {
     XA_Print("error: %s - exiting\n", err_mess);
     xacodec_exit();
 }
+
+int XA_Add_Func_To_Free_Chain(XA_ANIM_HDR *anim_hdr, void (*function)())
+{
+    XA_Print("XA_Add_Func_To_Free_Chain('anim_hdr: %08x', 'function: %08x')",
+	    anim_hdr, function);
+    xacodec_driver->close_func[xa_close_func] = function;
+    if (xa_close_func+1 < XA_CLOSE_FUNCS)
+	xa_close_func++;
+}
 /* end of crap */
 
 /* load, init and query */
@@ -145,28 +156,26 @@
 	return(0);
     }
     
-    if (verbose > 2)
-	printf("dump: funcs: 0x%08x (num %d)\n", mod_hdr->funcs, mod_hdr->num_funcs);
+    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "dump: funcs: 0x%08x (num %d)\n", mod_hdr->funcs, mod_hdr->num_funcs);
     for (i = 0; i < mod_hdr->num_funcs; i++)
     {
-	if (verbose > 2)
-	    printf("dump(%d): %d %d [iq:0x%08x d:0x%08x]\n", i,
+	mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "dump(%d): %d %d [iq:0x%08x d:0x%08x]\n", i,
 		func[i].what, func[i].id, func[i].iq_func, func[i].dec_func);
 	if (func[i].what & XAVID_AVI_QUERY)
 	{
-	    printf("0x%08x: avi init/query func (id: %d)\n",
+	    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "0x%08x: avi init/query func (id: %d)\n",
 		func[i].iq_func, func[i].id);
 	    codec_driver->iq_func = func[i].iq_func;
 	}
 	if (func[i].what & XAVID_QT_QUERY)
 	{
-	    printf("0x%08x: qt init/query func (id: %d)\n",
+	    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "0x%08x: qt init/query func (id: %d)\n",
 		func[i].iq_func, func[i].id);
 	    codec_driver->iq_func = func[i].iq_func;
 	}
 	if (func[i].what & XAVID_DEC_FUNC)
 	{
-	    printf("0x%08x: decoder func (init/query: 0x%08x) (id: %d)\n",
+	    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "0x%08x: decoder func (init/query: 0x%08x) (id: %d)\n",
 		func[i].dec_func, func[i].iq_func, func[i].id);
 	    codec_driver->dec_func = func[i].dec_func;
 	}
@@ -183,15 +192,15 @@
     {
 	case CODEC_SUPPORTED:
 	    codec_driver->dec_func = codec_hdr->decoder;
-	    printf("Codec is supported: found decoder for %s at 0x%08x\n",
+	    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "Codec is supported: found decoder for %s at 0x%08x\n",
 		codec_hdr->description, codec_hdr->decoder);
 	    return(1);
 	case CODEC_UNSUPPORTED:
-	    printf("Codec is unsupported\n");
+	    mp_msg(MSGT_DECVIDEO, MSGL_FATAL, "Codec is unsupported by driver\n");
 	    return(0);
 	case CODEC_UNKNOWN:
 	default:
-	    printf("Codec is unknown\n");
+	    mp_msg(MSGT_DECVIDEO, MSGL_FATAL, "Codec is unknown by driver\n");
 	    return(0);
     }
 }
@@ -202,6 +211,7 @@
 {
     char dll[1024];
     XA_CODEC_HDR codec_hdr;
+    int i;
     
     xacodec_driver = realloc(xacodec_driver, sizeof(struct xacodec_driver));
     if (xacodec_driver == NULL)
@@ -209,7 +219,9 @@
 
     xacodec_driver->iq_func = NULL;
     xacodec_driver->dec_func = NULL;
-    xacodec_driver->close_func = NULL;
+
+    for (i=0; i < XA_CLOSE_FUNCS; i++)
+	xacodec_driver->close_func[i] = NULL;
 
     snprintf(dll, 1024, "%s/%s", xacodec_def_path, vidinfo->codec->dll);
     if (xacodec_init(dll, xacodec_driver) == 0)
@@ -258,12 +270,15 @@
 	case IMGFMT_BGR32:
 	    codec_hdr.depth = 32;
 	    break;
+	case IMGFMT_I420:
+	    codec_hdr.depth = 32;
+	    break;
 	default:
-	    printf("xacodec: not supported image format (%s)\n",
+	    mp_msg(MSGT_DECVIDEO, MSGL_FATAL, "xacodec: not supported image format (%s)\n",
 		vo_format_name(out_format));
 	    return(0);
     }
-    mp_msg(MSGT_DECVIDEO,MSGL_INFO, "xacodec: querying for %dx%d %dbit [fourcc: %4x] (%s)...\n",
+    mp_msg(MSGT_DECVIDEO, MSGL_INFO, "xacodec: querying for %dx%d %dbit [fourcc: %4x] (%s)...\n",
 	codec_hdr.x, codec_hdr.y, codec_hdr.depth, codec_hdr.compression,
 	codec_hdr.description);
 
@@ -292,12 +307,12 @@
 
     if (vidinfo->our_out_buffer == NULL)
     {
-	mp_msg(MSGT_DECVIDEO,MSGL_ERR,  "cannot allocate memory for output: %s",
+	mp_msg(MSGT_DECVIDEO, MSGL_ERR, "cannot allocate memory for output: %s",
 	    strerror(errno));
 	return(0);
     }
 
-    printf("extra: %08x - %dx%d %dbit\n", codec_hdr.extra,
+    mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "extra: %08x - %dx%d %dbit\n", codec_hdr.extra,
 	codec_hdr.x, codec_hdr.y, codec_hdr.depth);
     return(1);
 }
@@ -390,8 +405,17 @@
 
 int xacodec_exit()
 {
-    if (xacodec_driver->close_func)
-	xacodec_driver->close_func();
+    int i;
+    void (*close_func)();
+
+    for (i=0; i < XA_CLOSE_FUNCS; i++)
+	if (xacodec_driver->close_func[i])
+	{
+	    close_func = xacodec_driver->close_func[i];
+	    close_func();
+	}
+//    if (xacodec_driver->close_func)
+//	xacodec_driver->close_func();
     dlclose(xacodec_driver->file_handler);
     if (xacodec_driver->decinfo != NULL)
 	free(xacodec_driver->decinfo);
@@ -404,6 +428,17 @@
 /* *** XANIM SHIT *** */
 /* like loader/win32.c - mini XANIM library */
 
+
+unsigned long XA_Time_Read()
+{
+    return(GetRelativeTime());
+}
+
+void XA_dummy()
+{
+    XA_Print("dummy() called");
+}
+
 typedef struct
 {
     unsigned char r0, g0, b0;
@@ -476,9 +511,6 @@
 
 }
 
-void dummy(){
-    XA_Print("dummy() called");
-}
 
 void *YUV2x2_Blk_Func(unsigned int image_type, int blks, unsigned int dith_flag)
 {
@@ -568,12 +600,6 @@
     return (void*)XA_YUV_2x2_clr;
 }
 
-int XA_Add_Func_To_Free_Chain(XA_ANIM_HDR *anim_hdr, void (*function)())
-{
-    XA_Print("XA_Add_Func_To_Free_Chain('anim_hdr: %08x', 'function: %08x')",
-	    anim_hdr, function);
-    xacodec_driver->close_func = function;
-}
 
 int XA_Gen_YUV_Tabs(XA_ANIM_HDR *anim_hdr)
 {
@@ -655,11 +681,6 @@
     return((void *)color_func);
 }
 
-unsigned long XA_Time_Read()
-{
-    return(GetRelativeTime());
-}
-
 /* YUV 41 11 11 routines */
 void XA_YUV411111_To_RGB(unsigned char *image, unsigned int imagex, unsigned int imagey,
     unsigned int i_x, unsigned int i_y, YUVBufs *yuv_bufs, YUVTabs *yuv_tabs,
@@ -684,6 +705,12 @@
     return((void *)color_func);
 }
 
+/* YUV 22 11 11 routines */
+void *XA_YUV221111_Func(unsigned int image_type)
+{
+    XA_Print("XA_YUV221111_Func('image_type: %d')", image_type);    
+    return((void *)XA_dummy);
+}
 
 YUVBufs jpg_YUVBufs;
 YUVTabs def_yuv_tabs;