diff options
Diffstat (limited to 'debian/transcode/transcode-1.1.7/import/decode_a52.c')
| -rw-r--r-- | debian/transcode/transcode-1.1.7/import/decode_a52.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/debian/transcode/transcode-1.1.7/import/decode_a52.c b/debian/transcode/transcode-1.1.7/import/decode_a52.c new file mode 100644 index 00000000..c66dde54 --- /dev/null +++ b/debian/transcode/transcode-1.1.7/import/decode_a52.c @@ -0,0 +1,98 @@ +/* + * decode_a52.c + * + * Copyright (C) Thomas Oestreich - June 2001 + * + * This file is part of transcode, a video stream processing tool + * + * transcode is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * transcode is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "transcode.h" +#include "libtc/libtc.h" +#include "tcinfo.h" + +#ifdef HAVE_DLFCN_H +#include <dlfcn.h> +#else +# ifdef OS_DARWIN +# include "libdldarwin/dlfcn.h" +# endif +#endif + +#include "ioaux.h" +#include "tc.h" + +static char *mod_path=MOD_PATH; + +#define MODULE "a52_decore.so" + +// dl stuff +static int (*p_a52_decore)(decode_t *decode); +static void *handle; +static char module[TC_BUF_MAX]; + +static int a52_do_init(char *path) { + const char *error; + + tc_snprintf(module, sizeof(module), "%s/%s", path, MODULE); + + if(verbose & TC_DEBUG) + tc_log_msg(__FILE__, "loading external module %s", module); + + // try transcode's module directory + handle = dlopen(module, RTLD_NOW); + if (!handle) { + //try the default: + // handle = dlopen(MODULE, RTLD_GLOBAL| RTLD_LAZY); + if (!handle) { + error = dlerror(); + fputs (error, stderr); + fputs("\n", stderr); + return(-1); + } + } + + p_a52_decore = dlsym(handle, "a52_decore"); + if ((error = dlerror()) != NULL) { + fputs(error, stderr); + fputs("\n", stderr); + return(-1); + } + + return(0); +} + +/* ------------------------------------------------------------ + * + * decoder thread + * + * ------------------------------------------------------------*/ + +void decode_a52(decode_t *decode) +{ + verbose = decode->verbose; + + //load the codec + if(a52_do_init(mod_path)<0) { + tc_log_error(__FILE__, "failed to init ATSC A-52 stream decoder"); + import_exit(1); + } + + (*p_a52_decore)(decode); + dlclose(handle); + import_exit(0); +} |
