vdr/xine-lib-vdr/src/libreal Makefile.am Makefile.in audio_decoder.c xine_decoder.c
Darren Salt
pkg-vdr-dvb-changes@lists.alioth.debian.org
Mon, 04 Apr 2005 22:32:51 +0000
Update of /cvsroot/pkg-vdr-dvb/vdr/xine-lib-vdr/src/libreal
In directory haydn:/tmp/cvs-serv3673/src/libreal
Added Files:
Makefile.am Makefile.in audio_decoder.c xine_decoder.c
Log Message:
Import of VDR-patched xine-lib.
--- NEW FILE: xine_decoder.c ---
/*
* Copyright (C) 2000-2004 the xine project
*
* This file is part of xine, a free video player.
*
* xine 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 of the License, or
* (at your option) any later version.
*
* xine 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
* $Id: xine_decoder.c,v 1.1 2005/04/04 22:32:49 dsalt-guest Exp $
*
* thin layer to use real binary-only codecs in xine
*
* code inspired by work from Florian Schneider for the MPlayer Project
*/
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dlfcn.h>
#ifdef __x86_64__
#include <elf.h>
#endif
#define LOG_MODULE "real_decoder"
#define LOG_VERBOSE
/*
#define LOG
*/
#include "bswap.h"
#include "xine_internal.h"
#include "video_out.h"
#include "buffer.h"
#include "xineutils.h"
typedef struct {
video_decoder_class_t decoder_class;
/* empty so far */
} real_class_t;
#define BUF_SIZE 65536
typedef struct realdec_decoder_s {
video_decoder_t video_decoder;
real_class_t *cls;
xine_stream_t *stream;
void *rv_handle;
uint32_t (*rvyuv_custom_message)(uint32_t*, void*);
uint32_t (*rvyuv_free)(void*);
uint32_t (*rvyuv_hive_message)(uint32_t, uint32_t);
uint32_t (*rvyuv_init)(void*, void*); /* initdata,context */
uint32_t (*rvyuv_transform)(char*, char*, uint32_t*, uint32_t*,void*);
void *context;
uint32_t width, height;
double ratio;
double fps;
uint8_t *chunk_buffer;
int chunk_buffer_size;
int chunk_buffer_max;
int64_t pts;
int duration;
uint8_t *frame_buffer;
int frame_size;
int decoder_ok;
} realdec_decoder_t;
/* we need exact positions */
typedef struct {
int16_t unk1;
int16_t w;
int16_t h;
int16_t unk3;
int32_t unk2;
int32_t subformat;
int32_t unk5;
int32_t format;
} rv_init_t;
void *__builtin_vec_new(uint32_t size);
void __builtin_vec_delete(void *mem);
void __pure_virtual(void);
#ifdef __x86_64__
/* (gb) quick-n-dirty check to be run natively */
static int is_x86_64_object_(FILE *f)
{
Elf64_Ehdr *hdr = malloc(sizeof(Elf64_Ehdr));
if (hdr == NULL)
return 0;
if (fseek(f, 0, SEEK_SET) != 0) {
free(hdr);
return 0;
}
if (fread(hdr, sizeof(Elf64_Ehdr), 1, f) != 1) {
free(hdr);
return 0;
}
if (hdr->e_ident[EI_MAG0] != ELFMAG0 ||
hdr->e_ident[EI_MAG1] != ELFMAG1 ||
hdr->e_ident[EI_MAG2] != ELFMAG2 ||
hdr->e_ident[EI_MAG3] != ELFMAG3) {
free(hdr);
return 0;
}
return hdr->e_machine == EM_X86_64;
}
static inline int is_x86_64_object(const char *filename)
{
FILE *f;
int ret;
if ((f = fopen(filename, "r")) == NULL)
return 0;
ret = is_x86_64_object_(f);
fclose(f);
return ret;
}
#endif
/*
* real codec loader
*/
static int load_syms_linux (realdec_decoder_t *this, char *codec_name) {
cfg_entry_t* entry = this->stream->xine->config->lookup_entry(
this->stream->xine->config, "decoder.external.real_codecs_path");
char path[1024];
snprintf (path, sizeof(path), "%s/%s", entry->str_value, codec_name);
#ifdef __x86_64__
/* check whether it's a real x86-64 library */
if (!is_x86_64_object(path))
return 0;
#endif
lprintf ("opening shared obj '%s'\n", path);
this->rv_handle = dlopen (path, RTLD_LAZY);
if (!this->rv_handle) {
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "libreal: error: %s\n", dlerror());
_x_message(this->stream, XINE_MSG_LIBRARY_LOAD_ERROR,
codec_name, NULL);
return 0;
}
this->rvyuv_custom_message = dlsym (this->rv_handle, "RV20toYUV420CustomMessage");
this->rvyuv_free = dlsym (this->rv_handle, "RV20toYUV420Free");
this->rvyuv_hive_message = dlsym (this->rv_handle, "RV20toYUV420HiveMessage");
this->rvyuv_init = dlsym (this->rv_handle, "RV20toYUV420Init");
this->rvyuv_transform = dlsym (this->rv_handle, "RV20toYUV420Transform");
if (this->rvyuv_custom_message &&
this->rvyuv_free &&
this->rvyuv_hive_message &&
this->rvyuv_init &&
this->rvyuv_transform)
return 1;
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
_("libreal: Error resolving symbols! (version incompatibility?)\n"));
return 0;
}
static int init_codec (realdec_decoder_t *this, buf_element_t *buf) {
/* unsigned int* extrahdr = (unsigned int*) (buf->content+28); */
int result;
rv_init_t init_data = {11, 0, 0, 0, 0, 0, 1, 0}; /* rv30 */
switch (buf->type) {
case BUF_VIDEO_RV20:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Real Video 2.0");
if (!load_syms_linux (this, "drv2.so.6.0"))
return 0;
break;
case BUF_VIDEO_RV30:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Real Video 3.0");
if (!load_syms_linux (this, "drv3.so.6.0"))
return 0;
break;
case BUF_VIDEO_RV40:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Real Video 4.0");
if (!load_syms_linux(this, "drv4.so.6.0"))
return 0;
break;
default:
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
"libreal: error, i don't handle buf type 0x%08x\n", buf->type);
_x_abort();
}
init_data.w = BE_16(&buf->content[12]);
init_data.h = BE_16(&buf->content[14]);
this->width = (init_data.w + 1) & (~1);
this->height = (init_data.h + 1) & (~1);
if(buf->decoder_flags & BUF_FLAG_ASPECT)
this->ratio = (double)buf->decoder_info[1] / (double)buf->decoder_info[2];
else
this->ratio = (double)this->width / (double)this->height;
/* While the framerate is stored in the header it sometimes doesn't bear
* much resemblence to the actual frequency of frames in the file. Hence
* it's better to just let the engine estimate the frame duration for us */
#if 0
this->fps = (double) BE_16(&buf->content[22]) +
((double) BE_16(&buf->content[24]) / 65536.0);
this->duration = 90000.0 / this->fps;
#endif
lprintf("this->ratio=%d\n", this->ratio);
lprintf ("init_data.w=%d(0x%x), init_data.h=%d(0x%x),"
"this->width=%d(0x%x), this->height=%d(0x%x)\n",
init_data.w, init_data.w,
init_data.h, init_data.h,
this->width, this->width, this->height, this->height);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_WIDTH, this->width);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HEIGHT, this->height);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_RATIO, this->ratio*10000);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_FRAME_DURATION, this->duration);
init_data.subformat = BE_32(&buf->content[26]);
init_data.format = BE_32(&buf->content[30]);
#ifdef LOG
printf ("libreal: init_data for rvyuv_init:\n");
xine_hexdump ((char *) &init_data, sizeof (init_data));
printf ("libreal: buf->content\n");
xine_hexdump (buf->content, buf->size);
#endif
lprintf ("init codec %dx%d... %x %x\n",
init_data.w, init_data.h,
init_data.subformat, init_data.format );
this->context = NULL;
result = this->rvyuv_init (&init_data, &this->context);
lprintf ("init result: %d\n", result);
/* setup rv30 codec (codec sub-type and image dimensions): */
if ((init_data.format>=0x20200002) && (buf->type != BUF_VIDEO_RV40)) {
int i, j;
uint32_t *cmsg24;
uint32_t cmsg_data[9];
cmsg24 = xine_xmalloc((buf->size - 34 + 2) * sizeof(uint32_t));
cmsg24[0] = this->width;
cmsg24[1] = this->height;
for(i = 2, j = 34; j < buf->size; i++, j++)
cmsg24[i] = 4 * buf->content[j];
cmsg_data[0] = 0x24;
cmsg_data[1] = 1 + ((init_data.subformat >> 16) & 7);
cmsg_data[2] = (uint32_t) cmsg24;
#ifdef LOG
printf ("libreal: CustomMessage cmsg_data:\n");
xine_hexdump ((uint8_t *) cmsg_data, sizeof (cmsg_data));
printf ("libreal: cmsg24:\n");
xine_hexdump ((uint8_t *) cmsg24, (buf->size - 34 + 2) * sizeof(uint32_t));
#endif
this->rvyuv_custom_message (cmsg_data, this->context);
free(cmsg24);
}
this->stream->video_out->open(this->stream->video_out, this->stream);
this->frame_size = this->width * this->height;
this->frame_buffer = xine_xmalloc (this->width * this->height * 3 / 2);
this->chunk_buffer = xine_xmalloc (BUF_SIZE);
this->chunk_buffer_max = BUF_SIZE;
return 1;
}
static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
lprintf ("decode_data, flags=0x%08x, len=%d, pts=%lld ...\n",
buf->decoder_flags, buf->size, buf->pts);
if (buf->decoder_flags & BUF_FLAG_PREVIEW) {
/* real_find_sequence_header (&this->real, buf->content, buf->content + buf->size);*/
return;
}
if (buf->decoder_flags & BUF_FLAG_FRAMERATE) {
this->duration = buf->decoder_info[0];
_x_stream_info_set(this->stream, XINE_STREAM_INFO_FRAME_DURATION,
this->duration);
}
if (buf->decoder_flags & BUF_FLAG_HEADER) {
this->decoder_ok = init_codec (this, buf);
if( !this->decoder_ok )
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HANDLED, 0);
} else if (this->decoder_ok && this->context) {
/* Each frame starts with BUF_FLAG_FRAME_START and ends with
* BUF_FLAG_FRAME_END.
* The last buffer contains the chunk offset table.
*/
if (!(buf->decoder_flags & BUF_FLAG_SPECIAL)) {
lprintf ("buffer (%d bytes)\n", buf->size);
if (buf->decoder_flags & BUF_FLAG_FRAME_START) {
/* new frame starting */
this->chunk_buffer_size = 0;
this->pts = buf->pts;
lprintf ("new frame starting, pts=%lld\n", this->pts);
}
if ((this->chunk_buffer_size + buf->size) > this->chunk_buffer_max) {
lprintf("increasing chunk buffer size\n");
this->chunk_buffer_max *= 2;
this->chunk_buffer = realloc(this->chunk_buffer, this->chunk_buffer_max);
}
xine_fast_memcpy (this->chunk_buffer + this->chunk_buffer_size,
buf->content,
buf->size);
this->chunk_buffer_size += buf->size;
} else {
/* end of frame, chunk table */
lprintf ("special buffer (%d bytes)\n", buf->size);
if (buf->decoder_info[1] == BUF_SPECIAL_RV_CHUNK_TABLE) {
int result;
vo_frame_t *img;
uint32_t transform_out[5];
uint32_t transform_in[6];
lprintf ("chunk table\n");
transform_in[0] = this->chunk_buffer_size; /* length of the packet (sub-packets appended) */
transform_in[1] = 0; /* unknown, seems to be unused */
transform_in[2] = buf->decoder_info[2]; /* number of sub-packets - 1 */
transform_in[3] = (uint32_t) buf->decoder_info_ptr[2]; /* table of sub-packet offsets */
transform_in[4] = 0; /* unknown, seems to be unused */
transform_in[5] = this->pts / 90; /* timestamp (the integer value from the stream) */
#ifdef LOG
printf ("libreal: got %d chunks\n",
buf->decoder_info[2] + 1);
printf ("libreal: decoding %d bytes:\n", this->chunk_buffer_size);
xine_hexdump (this->chunk_buffer, this->chunk_buffer_size);
printf ("libreal: transform_in:\n");
xine_hexdump ((uint8_t *) transform_in, 6 * 4);
printf ("libreal: chunk_table:\n");
xine_hexdump ((uint8_t *) buf->decoder_info_ptr[2],
2*(buf->decoder_info[2]+1)*sizeof(uint32_t));
#endif
result = this->rvyuv_transform (this->chunk_buffer,
this->frame_buffer,
transform_in,
transform_out,
this->context);
lprintf ("transform result: %08x\n", result);
lprintf ("transform_out:\n");
#ifdef LOG
xine_hexdump ((uint8_t *) transform_out, 5 * 4);
#endif
/* Sometimes the stream contains video of a different size
* to that specified in the realmedia header */
if(transform_out[0] && ((transform_out[3] != this->width) ||
(transform_out[4] != this->height))) {
this->width = transform_out[3];
this->height = transform_out[4];
this->frame_size = this->width * this->height;
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_WIDTH, this->width);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HEIGHT, this->height);
}
img = this->stream->video_out->get_frame (this->stream->video_out,
/* this->av_picture.linesize[0], */
this->width,
this->height,
this->ratio,
XINE_IMGFMT_YV12,
VO_BOTH_FIELDS);
img->pts = this->pts;
img->duration = this->duration;
_x_stream_info_set(this->stream, XINE_STREAM_INFO_FRAME_DURATION, this->duration);
img->bad_frame = 0;
yv12_to_yv12(
/* Y */
this->frame_buffer, this->width,
img->base[0], img->pitches[0],
/* U */
this->frame_buffer + this->frame_size, this->width/2,
img->base[1], img->pitches[1],
/* V */
this->frame_buffer + this->frame_size * 5/4, this->width/2,
img->base[2], img->pitches[2],
/* width x height */
this->width, this->height);
img->draw(img, this->stream);
img->free(img);
} else {
/* unsupported special buf */
}
}
}
lprintf ("decode_data...done\n");
}
static void realdec_flush (video_decoder_t *this_gen) {
/* realdec_decoder_t *this = (realdec_decoder_t *) this_gen; */
lprintf ("flush\n");
}
static void realdec_reset (video_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
this->chunk_buffer_size = 0;
}
static void realdec_discontinuity (video_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
this->pts = 0;
}
static void realdec_dispose (video_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
lprintf ("dispose\n");
if (this->context)
this->stream->video_out->close(this->stream->video_out, this->stream);
if (this->rvyuv_free && this->context)
this->rvyuv_free (this->context);
if (this->rv_handle)
dlclose (this->rv_handle);
if (this->frame_buffer)
free (this->frame_buffer);
if (this->chunk_buffer)
free (this->chunk_buffer);
free (this);
lprintf ("dispose done\n");
}
static video_decoder_t *open_plugin (video_decoder_class_t *class_gen,
xine_stream_t *stream) {
real_class_t *cls = (real_class_t *) class_gen;
realdec_decoder_t *this ;
this = (realdec_decoder_t *) xine_xmalloc (sizeof (realdec_decoder_t));
this->video_decoder.decode_data = realdec_decode_data;
this->video_decoder.flush = realdec_flush;
this->video_decoder.reset = realdec_reset;
this->video_decoder.discontinuity = realdec_discontinuity;
this->video_decoder.dispose = realdec_dispose;
this->stream = stream;
this->cls = cls;
this->context = 0;
this->pts = 0;
this->duration = 0;
return &this->video_decoder;
}
/*
* real plugin class
*/
static char *get_identifier (video_decoder_class_t *this) {
return "realvdec";
}
static char *get_description (video_decoder_class_t *this) {
return "real binary-only codec based video decoder plugin";
}
static void dispose_class (video_decoder_class_t *this) {
free (this);
}
/*
* some fake functions to make real codecs happy
*/
void *__builtin_vec_new(uint32_t size) {
return malloc(size);
}
void __builtin_vec_delete(void *mem) {
free(mem);
}
void __pure_virtual(void) {
lprintf("libreal: FATAL: __pure_virtual() called!\n");
/* exit(1); */
}
static void *init_class (xine_t *xine, void *data) {
real_class_t *this;
config_values_t *config = xine->config;
char *real_codec_path;
char *default_real_codec_path = "";
struct stat s;
this = (real_class_t *) xine_xmalloc (sizeof (real_class_t));
this->decoder_class.open_plugin = open_plugin;
this->decoder_class.get_identifier = get_identifier;
this->decoder_class.get_description = get_description;
this->decoder_class.dispose = dispose_class;
/* try some auto-detection */
if (!stat ("/usr/local/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/local/RealPlayer8/Codecs";
if (!stat ("/usr/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/RealPlayer8/Codecs";
if (!stat ("/usr/lib/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/RealPlayer8/Codecs";
if (!stat ("/opt/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/opt/RealPlayer8/Codecs";
if (!stat ("/usr/lib/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/RealPlayer9/users/Real/Codecs";
if (!stat ("/usr/lib64/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib64/RealPlayer8/Codecs";
if (!stat ("/usr/lib64/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib64/RealPlayer9/users/Real/Codecs";
if (!stat ("/usr/lib/win32/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/win32";
real_codec_path = config->register_string (config, "decoder.external.real_codecs_path",
default_real_codec_path,
_("path to RealPlayer codecs"),
_("If you have RealPlayer installed, specify the path "
"to its codec directory here. You can easily find "
"the codec directory by looking for a file named "
"\"drv3.so.6.0\" in it. If xine can find the RealPlayer "
"codecs, it will use them to decode RealPlayer content "
"for you. Consult the xine FAQ for more information on "
"how to install the codecs."),
10, NULL, this);
lprintf ("real codec path : %s\n", real_codec_path);
return this;
}
/*
* exported plugin catalog entry
*/
static uint32_t supported_types[] = { BUF_VIDEO_RV20,
BUF_VIDEO_RV30,
BUF_VIDEO_RV40,
0 };
static decoder_info_t dec_info_real = {
supported_types, /* supported types */
7 /* priority */
};
plugin_info_t xine_plugin_info[] = {
/* type, API, "name", version, special_info, init_function */
{ PLUGIN_VIDEO_DECODER | PLUGIN_MUST_PRELOAD, 18, "real", XINE_VERSION_CODE, &dec_info_real, init_class },
{ PLUGIN_NONE, 0, "", 0, NULL, NULL }
};
--- NEW FILE: Makefile.am ---
include $(top_srcdir)/misc/Makefile.common
libdir = $(XINE_PLUGINDIR)
lib_LTLIBRARIES = xineplug_decode_real.la xineplug_decode_real_audio.la
xineplug_decode_real_la_SOURCES = xine_decoder.c
xineplug_decode_real_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS)
xineplug_decode_real_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@
xineplug_decode_real_audio_la_SOURCES = audio_decoder.c
xineplug_decode_real_audio_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS)
xineplug_decode_real_audio_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@
--- NEW FILE: audio_decoder.c ---
/*
* Copyright (C) 2000-2003 the xine project
*
* This file is part of xine, a free video player.
*
* xine 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 of the License, or
* (at your option) any later version.
*
* xine 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
* $Id: audio_decoder.c,v 1.1 2005/04/04 22:32:49 dsalt-guest Exp $
*
* thin layer to use real binary-only codecs in xine
*
* code inspired by work from Florian Schneider for the MPlayer Project
*/
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dlfcn.h>
#ifdef __x86_64__
#include <elf.h>
#endif
#define LOG_MODULE "real_audio_decoder"
#define LOG_VERBOSE
/*
#define LOG
*/
#include "bswap.h"
#include "xine_internal.h"
#include "video_out.h"
#include "buffer.h"
#include "xineutils.h"
typedef struct {
audio_decoder_class_t decoder_class;
/* empty so far */
} real_class_t;
typedef struct realdec_decoder_s {
audio_decoder_t audio_decoder;
real_class_t *cls;
xine_stream_t *stream;
void *ra_handle;
unsigned long (*raCloseCodec)(void*);
unsigned long (*raDecode)(void*, char*,unsigned long,char*,unsigned int*,long);
unsigned long (*raFlush)(unsigned long,unsigned long,unsigned long);
unsigned long (*raFreeDecoder)(void*);
void* (*raGetFlavorProperty)(void*,unsigned long,unsigned long,int*);
unsigned long (*raInitDecoder)(void*, void*);
unsigned long (*raOpenCodec2)(void*);
unsigned long (*raSetFlavor)(void*,unsigned long);
void (*raSetDLLAccessPath)(char*);
void (*raSetPwd)(char*,char*);
void *context;
int sps, w, h;
int block_align;
uint8_t *frame_buffer;
uint8_t *frame_reordered;
int frame_size;
int frame_num_bytes;
int sample_size;
uint64_t pts;
int output_open;
int decoder_ok;
} realdec_decoder_t;
typedef struct {
int samplerate;
short bits;
short channels;
int unk1;
int subpacket_size;
int coded_frame_size;
int codec_data_length;
void *extras;
} ra_init_t;
void *__builtin_new(unsigned long size);
void __builtin_delete (void *foo);
void *__builtin_vec_new(unsigned long size);
void __builtin_vec_delete(void *mem);
void __pure_virtual(void);
void *__builtin_new(unsigned long size) {
return malloc(size);
}
void __builtin_delete (void *foo) {
/* printf ("libareal: __builtin_delete called\n"); */
free (foo);
}
#ifdef __x86_64__
/* (gb) quick-n-dirty check to be run natively */
static int is_x86_64_object_(FILE *f)
{
Elf64_Ehdr *hdr = malloc(sizeof(Elf64_Ehdr));
if (hdr == NULL)
return 0;
if (fseek(f, 0, SEEK_SET) != 0) {
free(hdr);
return 0;
}
if (fread(hdr, sizeof(Elf64_Ehdr), 1, f) != 1) {
free(hdr);
return 0;
}
if (hdr->e_ident[EI_MAG0] != ELFMAG0 ||
hdr->e_ident[EI_MAG1] != ELFMAG1 ||
hdr->e_ident[EI_MAG2] != ELFMAG2 ||
hdr->e_ident[EI_MAG3] != ELFMAG3) {
free(hdr);
return 0;
}
return hdr->e_machine == EM_X86_64;
}
static inline int is_x86_64_object(const char *filename)
{
FILE *f;
int ret;
if ((f = fopen(filename, "r")) == NULL)
return 0;
ret = is_x86_64_object_(f);
fclose(f);
return ret;
}
#endif
static int load_syms_linux (realdec_decoder_t *this, char *codec_name) {
cfg_entry_t* entry = this->stream->xine->config->lookup_entry(
this->stream->xine->config, "decoder.external.real_codecs_path");
char path[1024];
snprintf (path, sizeof(path), "%s/%s", entry->str_value, codec_name);
#ifdef __x86_64__
/* check whether it's a real x86-64 library */
if (!is_x86_64_object(path))
return 0;
#endif
lprintf ("(audio) opening shared obj '%s'\n", path);
this->ra_handle = dlopen (path, RTLD_LAZY);
if (!this->ra_handle) {
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "libareal: error: %s\n", dlerror());
_x_message(this->stream, XINE_MSG_LIBRARY_LOAD_ERROR,
codec_name, NULL);
return 0;
}
this->raCloseCodec = dlsym (this->ra_handle, "RACloseCodec");
this->raDecode = dlsym (this->ra_handle, "RADecode");
this->raFlush = dlsym (this->ra_handle, "RAFlush");
this->raFreeDecoder = dlsym (this->ra_handle, "RAFreeDecoder");
this->raGetFlavorProperty = dlsym (this->ra_handle, "RAGetFlavorProperty");
this->raOpenCodec2 = dlsym (this->ra_handle, "RAOpenCodec2");
this->raInitDecoder = dlsym (this->ra_handle, "RAInitDecoder");
this->raSetFlavor = dlsym (this->ra_handle, "RASetFlavor");
this->raSetDLLAccessPath = dlsym (this->ra_handle, "SetDLLAccessPath");
this->raSetPwd = dlsym (this->ra_handle, "RASetPwd"); /* optional, used by SIPR */
if (!this->raCloseCodec || !this->raDecode || !this->raFlush || !this->raFreeDecoder ||
!this->raGetFlavorProperty || !this->raOpenCodec2 || !this->raSetFlavor ||
/*!raSetDLLAccessPath ||*/ !this->raInitDecoder){
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
_("libareal: (audio) Cannot resolve symbols - incompatible dll: %s\n"), path);
return 0;
}
if (this->raSetDLLAccessPath){
char path[1024];
snprintf(path, sizeof(path) - 1, "DT_Codecs=%s", entry->str_value);
if (path[strlen(path)-1]!='/'){
path[strlen(path)+1]=0;
path[strlen(path)]='/';
}
path[strlen(path)+1]=0;
this->raSetDLLAccessPath(path);
}
lprintf ("audio decoder loaded successfully\n");
return 1;
}
static int init_codec (realdec_decoder_t *this, buf_element_t *buf) {
int version, result ;
int samples_per_sec, bits_per_sample, num_channels;
int subpacket_size, coded_frame_size, codec_data_length;
int coded_frame_size2, data_len, flavor;
int mode;
void *extras;
/*
* extract header data
*/
version = BE_16 (buf->content+4);
lprintf ("header buffer detected, header version %d\n", version);
#ifdef LOG
xine_hexdump (buf->content, buf->size);
#endif
flavor = BE_16 (buf->content+22);
coded_frame_size = BE_32 (buf->content+24);
codec_data_length= BE_16 (buf->content+40);
coded_frame_size2= BE_16 (buf->content+42);
subpacket_size = BE_16 (buf->content+44);
this->sps = subpacket_size;
this->w = coded_frame_size2;
this->h = codec_data_length;
if (version == 4) {
samples_per_sec = BE_16 (buf->content+48);
bits_per_sample = BE_16 (buf->content+52);
num_channels = BE_16 (buf->content+54);
/* FIXME: */
if (buf->type==BUF_AUDIO_COOK) {
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
"libareal: audio header version 4 for COOK audio not supported.\n");
return 0;
}
data_len = 0; /* FIXME: COOK audio needs this */
extras = buf->content+71;
} else {
samples_per_sec = BE_16 (buf->content+54);
bits_per_sample = BE_16 (buf->content+58);
num_channels = BE_16 (buf->content+60);
data_len = BE_32 (buf->content+74);
extras = buf->content+78;
}
this->block_align= coded_frame_size2;
lprintf ("0x%04x 0x%04x 0x%04x 0x%04x data_len 0x%04x\n",
subpacket_size, coded_frame_size, codec_data_length,
coded_frame_size2, data_len);
lprintf ("%d samples/sec, %d bits/sample, %d channels\n",
samples_per_sec, bits_per_sample, num_channels);
/* load codec, resolv symbols */
switch (buf->type) {
case BUF_AUDIO_COOK:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "Cook");
if (!load_syms_linux (this, "cook.so.6.0"))
return 0;
break;
case BUF_AUDIO_ATRK:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "Atrac");
if (!load_syms_linux (this, "atrc.so.6.0"))
return 0;
this->block_align = 384;
break;
case BUF_AUDIO_14_4:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "Real 14.4");
if (!load_syms_linux (this, "14_4.so.6.0"))
return 0;
break;
case BUF_AUDIO_28_8:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "Real 28.8");
if (!load_syms_linux (this, "28_8.so.6.0"))
return 0;
break;
case BUF_AUDIO_SIPRO:
_x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "Sipro");
if (!load_syms_linux (this, "sipr.so.6.0"))
return 0;
/* this->block_align = 19; */
break;
default:
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
"libareal: error, i don't handle buf type 0x%08x\n", buf->type);
return 0;
}
/*
* init codec
*/
result = this->raOpenCodec2 (&this->context);
if (result) {
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "libareal: error in raOpenCodec2: %d\n", result);
return 0;
}
{
ra_init_t init_data;
init_data.samplerate = samples_per_sec;
init_data.bits = bits_per_sample;
init_data.channels = num_channels;
init_data.unk1 = 100; /* ??? */
init_data.subpacket_size = subpacket_size; /* subpacket size */
init_data.coded_frame_size = coded_frame_size; /* coded frame size */
init_data.codec_data_length = data_len; /* codec data length */
init_data.extras = extras; /* extras */
#ifdef LOG
printf ("libareal: init_data:\n");
xine_hexdump ((char *) &init_data, sizeof (ra_init_t));
printf ("libareal: extras :\n");
xine_hexdump (init_data.extras, data_len);
#endif
result = this->raInitDecoder (this->context, &init_data);
if(result){
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
_("libareal: decoder init failed, error code: 0x%x\n"), result);
return 0;
}
}
if (this->raSetPwd){
/* used by 'SIPR' */
this->raSetPwd (this->context, "Ardubancel Quazanga"); /* set password... lol. */
lprintf ("password set\n");
}
result = this->raSetFlavor (this->context, flavor);
if (result){
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
_("libareal: decoder flavor setup failed, error code: 0x%x\n"), result);
return 0;
}
/*
* alloc buffers for data reordering
*/
if (this->sps) {
this->frame_size = this->w/this->sps*this->h*this->sps;
this->frame_buffer = xine_xmalloc (this->frame_size);
this->frame_reordered = xine_xmalloc (this->frame_size);
this->frame_num_bytes = 0;
} else {
this->frame_size = this->w*this->h;
this->frame_buffer = xine_xmalloc (this->frame_size);
this->frame_reordered = this->frame_buffer;
this->frame_num_bytes = 0;
}
/*
* open audio output
*/
switch (num_channels) {
case 1:
mode = AO_CAP_MODE_MONO;
break;
case 2:
mode = AO_CAP_MODE_STEREO;
break;
default:
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
_("libareal: oups, real can do more than 2 channels ?\n"));
return 0;
}
this->stream->audio_out->open(this->stream->audio_out,
this->stream,
bits_per_sample,
samples_per_sec,
mode) ;
this->output_open = 1;
this->sample_size = num_channels * (bits_per_sample>>3);
return 1;
}
static unsigned char sipr_swaps[38][2]={
{0,63},{1,22},{2,44},{3,90},{5,81},{7,31},{8,86},{9,58},{10,36},{12,68},
{13,39},{14,73},{15,53},{16,69},{17,57},{19,88},{20,34},{21,71},{24,46},
{25,94},{26,54},{28,75},{29,50},{32,70},{33,92},{35,74},{38,85},{40,56},
{42,87},{43,65},{45,59},{48,79},{49,93},{51,89},{55,95},{61,76},{67,83},
{77,80} };
static void realdec_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
lprintf ("decode_data %d bytes, flags=0x%08x, pts=%lld ...\n",
buf->size, buf->decoder_flags, buf->pts);
if (buf->decoder_flags & BUF_FLAG_PREVIEW) {
/* real_find_sequence_header (&this->real, buf->content, buf->content + buf->size);*/
} else if (buf->decoder_flags & BUF_FLAG_HEADER) {
this->decoder_ok = init_codec (this, buf) ;
if( !this->decoder_ok )
_x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED, 0);
} else if( this->decoder_ok ) {
int size;
lprintf ("content buffer detected, %d bytes\n", buf->size);
if (buf->pts && !this->pts)
this->pts = buf->pts;
size = buf->size;
while (size) {
int needed;
needed = this->frame_size - this->frame_num_bytes;
if (needed>size) {
memcpy (this->frame_buffer+this->frame_num_bytes, buf->content, size);
this->frame_num_bytes += size;
lprintf ("buffering %d/%d bytes\n", this->frame_num_bytes, this->frame_size);
size = 0;
} else {
int result;
int len =-1;
int n;
int sps = this->sps;
int w = this->w;
int h = this->h;
audio_buffer_t *audio_buffer;
lprintf ("buffering %d bytes\n", needed);
memcpy (this->frame_buffer+this->frame_num_bytes, buf->content, needed);
size -= needed;
this->frame_num_bytes = 0;
lprintf ("frame completed. reordering...\n");
lprintf ("bs=%d sps=%d w=%d h=%d \n",/*sh->wf->nBlockAlign*/-1,sps,w,h);
if (!sps) {
int j,n;
int bs=h*w*2/96; /* nibbles per subpacket */
unsigned char *p=this->frame_buffer;
/* 'sipr' way */
/* demux_read_data(sh->ds, p, h*w); */
for (n=0;n<38;n++){
int i=bs*sipr_swaps[n][0];
int o=bs*sipr_swaps[n][1];
/* swap nibbles of block 'i' with 'o' TODO: optimize */
for (j=0;j<bs;j++) {
int x=(i&1) ? (p[(i>>1)]>>4) : (p[(i>>1)]&15);
int y=(o&1) ? (p[(o>>1)]>>4) : (p[(o>>1)]&15);
if (o&1)
p[(o>>1)]=(p[(o>>1)]&0x0F)|(x<<4);
else
p[(o>>1)]=(p[(o>>1)]&0xF0)|x;
if (i&1)
p[(i>>1)]=(p[(i>>1)]&0x0F)|(y<<4);
else
p[(i>>1)]=(p[(i>>1)]&0xF0)|y;
++i;
++o;
}
}
/*
sh->a_in_buffer_size=
sh->a_in_buffer_len=w*h;
*/
} else {
int x, y;
uint8_t *s;
/* 'cook' way */
w /= sps; s = this->frame_buffer;
for (y=0; y<h; y++)
for (x=0; x<w; x++) {
lprintf ("x=%d, y=%d, off %d\n",
x, y, sps*(h*x+((h+1)/2)*(y&1)+(y>>1)));
memcpy (this->frame_reordered+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)),
s, sps);
s+=sps;
/* demux_read_data(sh->ds, sh->a_in_buffer+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)),
sps); */
}
/*
sh->a_in_buffer_size=
sh->a_in_buffer_len=w*h*sps;
*/
}
#ifdef LOG
xine_hexdump (this->frame_reordered, buf->size);
#endif
n = 0;
while (n<this->frame_size) {
audio_buffer = this->stream->audio_out->get_buffer (this->stream->audio_out);
result = this->raDecode (this->context,
this->frame_reordered+n,
this->block_align,
(char *) audio_buffer->mem, &len, -1);
lprintf ("raDecode result %d, len=%d\n", result, len);
audio_buffer->vpts = this->pts;
this->pts = 0;
audio_buffer->num_frames = len/this->sample_size;;
this->stream->audio_out->put_buffer (this->stream->audio_out,
audio_buffer, this->stream);
n+=this->block_align;
}
}
}
}
lprintf ("decode_data...done\n");
}
static void realdec_reset (audio_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
this->frame_num_bytes = 0;
}
static void realdec_discontinuity (audio_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
this->pts = 0;
}
static void realdec_dispose (audio_decoder_t *this_gen) {
realdec_decoder_t *this = (realdec_decoder_t *) this_gen;
lprintf ("dispose\n");
if (this->context)
this->raCloseCodec (this->context);
#if 0
printf ("libareal: FreeDecoder...\n");
if (this->context)
this->raFreeDecoder (this->context);
#endif
lprintf ("dlclose...\n");
if (this->ra_handle)
dlclose (this->ra_handle);
if (this->output_open)
this->stream->audio_out->close (this->stream->audio_out, this->stream);
if (this->frame_buffer)
free (this->frame_buffer);
free (this);
lprintf ("dispose done\n");
}
static audio_decoder_t *open_plugin (audio_decoder_class_t *class_gen,
xine_stream_t *stream) {
real_class_t *cls = (real_class_t *) class_gen;
realdec_decoder_t *this ;
this = (realdec_decoder_t *) xine_xmalloc (sizeof (realdec_decoder_t));
this->audio_decoder.decode_data = realdec_decode_data;
this->audio_decoder.reset = realdec_reset;
this->audio_decoder.discontinuity = realdec_discontinuity;
this->audio_decoder.dispose = realdec_dispose;
this->stream = stream;
this->cls = cls;
this->output_open = 0;
return &this->audio_decoder;
}
/*
* real plugin class
*/
static char *get_identifier (audio_decoder_class_t *this) {
return "realadec";
}
static char *get_description (audio_decoder_class_t *this) {
return "real binary-only codec based audio decoder plugin";
}
static void dispose_class (audio_decoder_class_t *this) {
free (this);
}
/*
* some fake functions to make real codecs happy
*/
void *__builtin_vec_new(unsigned long size) {
return malloc(size);
}
void __builtin_vec_delete(void *mem) {
free(mem);
}
void __pure_virtual(void) {
lprintf("libareal: FATAL: __pure_virtual() called!\n");
/* exit(1); */
}
/*
* real audio codec loader
*/
static void *init_class (xine_t *xine, void *data) {
real_class_t *this;
config_values_t *config = xine->config;
char *real_codec_path;
char *default_real_codec_path = "";
struct stat s;
this = (real_class_t *) xine_xmalloc (sizeof (real_class_t));
this->decoder_class.open_plugin = open_plugin;
this->decoder_class.get_identifier = get_identifier;
this->decoder_class.get_description = get_description;
this->decoder_class.dispose = dispose_class;
/* try some auto-detection */
if (!stat ("/usr/local/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/local/RealPlayer8/Codecs";
if (!stat ("/usr/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/RealPlayer8/Codecs";
if (!stat ("/usr/lib/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/RealPlayer8/Codecs";
if (!stat ("/opt/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/opt/RealPlayer8/Codecs";
if (!stat ("/usr/lib/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/RealPlayer9/users/Real/Codecs";
if (!stat ("/usr/lib64/RealPlayer8/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib64/RealPlayer8/Codecs";
if (!stat ("/usr/lib64/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib64/RealPlayer9/users/Real/Codecs";
if (!stat ("/usr/lib/win32/drv3.so.6.0", &s))
default_real_codec_path = "/usr/lib/win32";
real_codec_path = config->register_string (config, "decoder.external.real_codecs_path",
default_real_codec_path,
_("path to RealPlayer codecs"),
_("If you have RealPlayer installed, specify the path "
"to its codec directory here. You can easily find "
"the codec directory by looking for a file named "
"\"drv3.so.6.0\" in it. If xine can find the RealPlayer "
"codecs, it will use them to decode RealPlayer content "
"for you. Consult the xine FAQ for more information on "
"how to install the codecs."),
10, NULL, this);
lprintf ("real codec path : %s\n", real_codec_path);
return this;
}
/*
* exported plugin catalog entry
*/
static uint32_t audio_types[] = {
BUF_AUDIO_COOK, BUF_AUDIO_ATRK, /* BUF_AUDIO_14_4, BUF_AUDIO_28_8, */ BUF_AUDIO_SIPRO, 0
};
static decoder_info_t dec_info_audio = {
audio_types, /* supported types */
5 /* priority */
};
plugin_info_t xine_plugin_info[] = {
/* type, API, "name", version, special_info, init_function */
{ PLUGIN_AUDIO_DECODER | PLUGIN_MUST_PRELOAD, 15, "realadec", XINE_VERSION_CODE, &dec_info_audio, init_class },
{ PLUGIN_NONE, 0, "", 0, NULL, NULL }
};
--- NEW FILE: Makefile.in ---
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SOURCES = $(xineplug_decode_real_la_SOURCES) $(xineplug_decode_real_audio_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/misc/Makefile.common
subdir = src/libreal
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/_xine.m4 $(top_srcdir)/m4/aa.m4 \
$(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/arts.m4 \
$(top_srcdir)/m4/as.m4 $(top_srcdir)/m4/caca.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/directx.m4 \
$(top_srcdir)/m4/dl.m4 $(top_srcdir)/m4/dvdnav.m4 \
$(top_srcdir)/m4/esd.m4 $(top_srcdir)/m4/ffmpeg.m4 \
$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
$(top_srcdir)/m4/irixal.m4 $(top_srcdir)/m4/lcmessage.m4 \
$(top_srcdir)/m4/libFLAC.m4 $(top_srcdir)/m4/libfame.m4 \
$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/opengl.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/m4/speex.m4 \
$(top_srcdir)/m4/theora.m4 $(top_srcdir)/m4/vorbis.m4 \
$(top_srcdir)/m4/xv.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 = $(top_builddir)/src/xine-engine/libxine.la
am__DEPENDENCIES_2 =
xineplug_decode_real_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_2)
am_xineplug_decode_real_la_OBJECTS = xine_decoder.lo
xineplug_decode_real_la_OBJECTS = \
$(am_xineplug_decode_real_la_OBJECTS)
xineplug_decode_real_audio_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_2)
am_xineplug_decode_real_audio_la_OBJECTS = audio_decoder.lo
xineplug_decode_real_audio_la_OBJECTS = \
$(am_xineplug_decode_real_audio_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(xineplug_decode_real_la_SOURCES) \
$(xineplug_decode_real_audio_la_SOURCES)
DIST_SOURCES = $(xineplug_decode_real_la_SOURCES) \
$(xineplug_decode_real_audio_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
AAINFO = @AAINFO@
AALIB_CFLAGS = @AALIB_CFLAGS@
AALIB_CONFIG = @AALIB_CONFIG@
AALIB_LIBS = @AALIB_LIBS@
ACLOCAL = @ACLOCAL@
ACLOCAL_DIR = @ACLOCAL_DIR@
ALLOCA = @ALLOCA@
ALSA_CFLAGS = @ALSA_CFLAGS@
ALSA_LIBS = @ALSA_LIBS@
ALSA_STATIC_LIB = @ALSA_STATIC_LIB@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
ARTS_CFLAGS = @ARTS_CFLAGS@
ARTS_CONFIG = @ARTS_CONFIG@
ARTS_LIBS = @ARTS_LIBS@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_ASF_FALSE = @BUILD_ASF_FALSE@
BUILD_ASF_TRUE = @BUILD_ASF_TRUE@
BUILD_DHA_KMOD_FALSE = @BUILD_DHA_KMOD_FALSE@
BUILD_DHA_KMOD_TRUE = @BUILD_DHA_KMOD_TRUE@
BUILD_FAAD_FALSE = @BUILD_FAAD_FALSE@
BUILD_FAAD_TRUE = @BUILD_FAAD_TRUE@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CACA_CFLAGS = @CACA_CFLAGS@
CACA_CONFIG = @CACA_CONFIG@
CACA_LIBS = @CACA_LIBS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCAS = @CCAS@
CCASCOMPILE = @CCASCOMPILE@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@
DEPCOMP = @DEPCOMP@
DEPDIR = @DEPDIR@
DEPMOD = @DEPMOD@
DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
DIRECTFB_LIBS = @DIRECTFB_LIBS@
DIRECTX_AUDIO_LIBS = @DIRECTX_AUDIO_LIBS@
DIRECTX_CPPFLAGS = @DIRECTX_CPPFLAGS@
DIRECTX_VIDEO_LIBS = @DIRECTX_VIDEO_LIBS@
DLLTOOL = @DLLTOOL@
DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
DVDNAV_CONFIG = @DVDNAV_CONFIG@
DVDNAV_LIBS = @DVDNAV_LIBS@
DYNAMIC_LD_LIBS = @DYNAMIC_LD_LIBS@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ENABLE_VCD_FALSE = @ENABLE_VCD_FALSE@
ENABLE_VCD_TRUE = @ENABLE_VCD_TRUE@
ESD_CFLAGS = @ESD_CFLAGS@
ESD_CONFIG = @ESD_CONFIG@
ESD_LIBS = @ESD_LIBS@
EXEEXT = @EXEEXT@
EXTRA_X_CFLAGS = @EXTRA_X_CFLAGS@
EXTRA_X_LIBS = @EXTRA_X_LIBS@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_CPPFLAGS = @FFMPEG_CPPFLAGS@
FFMPEG_LIBS = @FFMPEG_LIBS@
FIG2DEV = @FIG2DEV@
FREETYPE_CONFIG = @FREETYPE_CONFIG@
FT2_CFLAGS = @FT2_CFLAGS@
FT2_LIBS = @FT2_LIBS@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GLUT_LIBS = @GLUT_LIBS@
GLU_LIBS = @GLU_LIBS@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNOME_VFS_CFLAGS = @GNOME_VFS_CFLAGS@
GNOME_VFS_LIBS = @GNOME_VFS_LIBS@
GOOM_LIBS = @GOOM_LIBS@
HAVE_AA_FALSE = @HAVE_AA_FALSE@
HAVE_AA_TRUE = @HAVE_AA_TRUE@
HAVE_ALSA09_FALSE = @HAVE_ALSA09_FALSE@
HAVE_ALSA09_TRUE = @HAVE_ALSA09_TRUE@
HAVE_ALSA_FALSE = @HAVE_ALSA_FALSE@
HAVE_ALSA_TRUE = @HAVE_ALSA_TRUE@
HAVE_ARMV4L_FALSE = @HAVE_ARMV4L_FALSE@
HAVE_ARMV4L_TRUE = @HAVE_ARMV4L_TRUE@
HAVE_ARTS_FALSE = @HAVE_ARTS_FALSE@
HAVE_ARTS_TRUE = @HAVE_ARTS_TRUE@
HAVE_BSDI_CDROM = @HAVE_BSDI_CDROM@
HAVE_CACA_FALSE = @HAVE_CACA_FALSE@
HAVE_CACA_TRUE = @HAVE_CACA_TRUE@
HAVE_CDROM_IOCTLS_FALSE = @HAVE_CDROM_IOCTLS_FALSE@
HAVE_CDROM_IOCTLS_TRUE = @HAVE_CDROM_IOCTLS_TRUE@
HAVE_COREAUDIO_FALSE = @HAVE_COREAUDIO_FALSE@
HAVE_COREAUDIO_TRUE = @HAVE_COREAUDIO_TRUE@
HAVE_DARWIN_CDROM = @HAVE_DARWIN_CDROM@
HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@
HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@
HAVE_DIRECTX_FALSE = @HAVE_DIRECTX_FALSE@
HAVE_DIRECTX_TRUE = @HAVE_DIRECTX_TRUE@
HAVE_DVDNAV_FALSE = @HAVE_DVDNAV_FALSE@
HAVE_DVDNAV_TRUE = @HAVE_DVDNAV_TRUE@
HAVE_DXR3_FALSE = @HAVE_DXR3_FALSE@
HAVE_DXR3_TRUE = @HAVE_DXR3_TRUE@
HAVE_ESD_FALSE = @HAVE_ESD_FALSE@
HAVE_ESD_TRUE = @HAVE_ESD_TRUE@
HAVE_FB_FALSE = @HAVE_FB_FALSE@
HAVE_FB_TRUE = @HAVE_FB_TRUE@
HAVE_FFMMX_FALSE = @HAVE_FFMMX_FALSE@
HAVE_FFMMX_TRUE = @HAVE_FFMMX_TRUE@
HAVE_FFMPEG_FALSE = @HAVE_FFMPEG_FALSE@
HAVE_FFMPEG_TRUE = @HAVE_FFMPEG_TRUE@
HAVE_FIG2DEV_FALSE = @HAVE_FIG2DEV_FALSE@
HAVE_FIG2DEV_TRUE = @HAVE_FIG2DEV_TRUE@
HAVE_FLAC_FALSE = @HAVE_FLAC_FALSE@
HAVE_FLAC_TRUE = @HAVE_FLAC_TRUE@
HAVE_FREEBSD_CDROM = @HAVE_FREEBSD_CDROM@
HAVE_GNOME_VFS_FALSE = @HAVE_GNOME_VFS_FALSE@
HAVE_GNOME_VFS_TRUE = @HAVE_GNOME_VFS_TRUE@
HAVE_IRIXAL_FALSE = @HAVE_IRIXAL_FALSE@
HAVE_IRIXAL_TRUE = @HAVE_IRIXAL_TRUE@
HAVE_LIBFAME_FALSE = @HAVE_LIBFAME_FALSE@
HAVE_LIBFAME_TRUE = @HAVE_LIBFAME_TRUE@
HAVE_LIBMNG_FALSE = @HAVE_LIBMNG_FALSE@
HAVE_LIBMNG_TRUE = @HAVE_LIBMNG_TRUE@
HAVE_LIBPNG_FALSE = @HAVE_LIBPNG_FALSE@
HAVE_LIBPNG_TRUE = @HAVE_LIBPNG_TRUE@
HAVE_LIBRTE_FALSE = @HAVE_LIBRTE_FALSE@
HAVE_LIBRTE_TRUE = @HAVE_LIBRTE_TRUE@
HAVE_LIBSMBCLIENT_FALSE = @HAVE_LIBSMBCLIENT_FALSE@
HAVE_LIBSMBCLIENT_TRUE = @HAVE_LIBSMBCLIENT_TRUE@
HAVE_LINUX_CDROM = @HAVE_LINUX_CDROM@
HAVE_LINUX_FALSE = @HAVE_LINUX_FALSE@
HAVE_LINUX_TRUE = @HAVE_LINUX_TRUE@
HAVE_MACOSX_VIDEO_FALSE = @HAVE_MACOSX_VIDEO_FALSE@
HAVE_MACOSX_VIDEO_TRUE = @HAVE_MACOSX_VIDEO_TRUE@
HAVE_MLIB_FALSE = @HAVE_MLIB_FALSE@
HAVE_MLIB_TRUE = @HAVE_MLIB_TRUE@
HAVE_OPENGL_FALSE = @HAVE_OPENGL_FALSE@
HAVE_OPENGL_TRUE = @HAVE_OPENGL_TRUE@
HAVE_OSS_FALSE = @HAVE_OSS_FALSE@
HAVE_OSS_TRUE = @HAVE_OSS_TRUE@
HAVE_POLYPAUDIO_FALSE = @HAVE_POLYPAUDIO_FALSE@
HAVE_POLYPAUDIO_TRUE = @HAVE_POLYPAUDIO_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SGMLTOOLS_FALSE = @HAVE_SGMLTOOLS_FALSE@
HAVE_SGMLTOOLS_TRUE = @HAVE_SGMLTOOLS_TRUE@
HAVE_SOLARIS_CDROM = @HAVE_SOLARIS_CDROM@
HAVE_SPEEX_FALSE = @HAVE_SPEEX_FALSE@
HAVE_SPEEX_TRUE = @HAVE_SPEEX_TRUE@
HAVE_STK_FALSE = @HAVE_STK_FALSE@
HAVE_STK_TRUE = @HAVE_STK_TRUE@
HAVE_SUNAUDIO_FALSE = @HAVE_SUNAUDIO_FALSE@
HAVE_SUNAUDIO_TRUE = @HAVE_SUNAUDIO_TRUE@
HAVE_SUNDGA_FALSE = @HAVE_SUNDGA_FALSE@
HAVE_SUNDGA_TRUE = @HAVE_SUNDGA_TRUE@
HAVE_SUNFB_FALSE = @HAVE_SUNFB_FALSE@
HAVE_SUNFB_TRUE = @HAVE_SUNFB_TRUE@
HAVE_SYNCFB_FALSE = @HAVE_SYNCFB_FALSE@
HAVE_SYNCFB_TRUE = @HAVE_SYNCFB_TRUE@
HAVE_THEORA_FALSE = @HAVE_THEORA_FALSE@
HAVE_THEORA_TRUE = @HAVE_THEORA_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_VCDNAV_FALSE = @HAVE_VCDNAV_FALSE@
HAVE_VCDNAV_TRUE = @HAVE_VCDNAV_TRUE@
HAVE_VIDIX_FALSE = @HAVE_VIDIX_FALSE@
HAVE_VIDIX_TRUE = @HAVE_VIDIX_TRUE@
HAVE_VLDXVMC_FALSE = @HAVE_VLDXVMC_FALSE@
HAVE_VLDXVMC_TRUE = @HAVE_VLDXVMC_TRUE@
HAVE_VORBIS_FALSE = @HAVE_VORBIS_FALSE@
HAVE_VORBIS_TRUE = @HAVE_VORBIS_TRUE@
HAVE_W32DLL_FALSE = @HAVE_W32DLL_FALSE@
HAVE_W32DLL_TRUE = @HAVE_W32DLL_TRUE@
HAVE_WIN32_CDROM = @HAVE_WIN32_CDROM@
HAVE_X11_FALSE = @HAVE_X11_FALSE@
HAVE_X11_TRUE = @HAVE_X11_TRUE@
HAVE_XVMC_FALSE = @HAVE_XVMC_FALSE@
HAVE_XVMC_TRUE = @HAVE_XVMC_TRUE@
HAVE_XV_FALSE = @HAVE_XV_FALSE@
HAVE_XV_TRUE = @HAVE_XV_TRUE@
HAVE_XXMC_FALSE = @HAVE_XXMC_FALSE@
HAVE_XXMC_TRUE = @HAVE_XXMC_TRUE@
HAVE_ZLIB_FALSE = @HAVE_ZLIB_FALSE@
HAVE_ZLIB_TRUE = @HAVE_ZLIB_TRUE@
HOST_OS_DARWIN_FALSE = @HOST_OS_DARWIN_FALSE@
HOST_OS_DARWIN_TRUE = @HOST_OS_DARWIN_TRUE@
INCLUDED_INTL_FALSE = @INCLUDED_INTL_FALSE@
INCLUDED_INTL_TRUE = @INCLUDED_INTL_TRUE@
INCLUDES = @INCLUDES@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_M4_FALSE = @INSTALL_M4_FALSE@
INSTALL_M4_TRUE = @INSTALL_M4_TRUE@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLDIR = @INTLDIR@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
IRIXAL_CFLAGS = @IRIXAL_CFLAGS@
IRIXAL_LIBS = @IRIXAL_LIBS@
IRIXAL_STATIC_LIB = @IRIXAL_STATIC_LIB@
KSTAT_LIBS = @KSTAT_LIBS@
LDFLAGS = @LDFLAGS@
LIBCDIO_CFLAGS = @LIBCDIO_CFLAGS@
LIBCDIO_LIBS = @LIBCDIO_LIBS@
LIBFAME_CFLAGS = @LIBFAME_CFLAGS@
LIBFAME_CONFIG = @LIBFAME_CONFIG@
LIBFAME_LIBS = @LIBFAME_LIBS@
LIBFFMPEG_CFLAGS = @LIBFFMPEG_CFLAGS@
LIBFLAC_CFLAGS = @LIBFLAC_CFLAGS@
LIBFLAC_LIBS = @LIBFLAC_LIBS@
LIBICONV = @LIBICONV@
LIBISO9660_LIBS = @LIBISO9660_LIBS@
LIBMODPLUG_CFLAGS = @LIBMODPLUG_CFLAGS@
LIBMODPLUG_LIBS = @LIBMODPLUG_LIBS@
LIBMPEG2_CFLAGS = @LIBMPEG2_CFLAGS@
LIBNAME = @LIBNAME@
LIBOBJS = @LIBOBJS@
LIBPNG_CONFIG = @LIBPNG_CONFIG@
LIBS = @LIBS@
LIBSMBCLIENT_LIBS = @LIBSMBCLIENT_LIBS@
LIBSTK_CFLAGS = @LIBSTK_CFLAGS@
LIBSTK_LIBS = @LIBSTK_LIBS@
LIBTOOL = $(SHELL) $(top_builddir)/libtool-nofpic
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIBVCDINFO_LIBS = @LIBVCDINFO_LIBS@
LIBVCD_CFLAGS = @LIBVCD_CFLAGS@
LIBVCD_LIBS = @LIBVCD_LIBS@
LIBVCD_SYSDEP = @LIBVCD_SYSDEP@
LINUX_CDROM_TIMEOUT = @LINUX_CDROM_TIMEOUT@
LINUX_INCLUDE = @LINUX_INCLUDE@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_REVISION = @LT_REVISION@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MKNOD = @MKNOD@
MLIB_CFLAGS = @MLIB_CFLAGS@
MLIB_LIBS = @MLIB_LIBS@
MNG_LIBS = @MNG_LIBS@
MSGFMT = @MSGFMT@
NET_LIBS = @NET_LIBS@
OBJC = @OBJC@
OBJCDEPMODE = @OBJCDEPMODE@
OBJCFLAGS = @OBJCFLAGS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OPENGL_CFLAGS = @OPENGL_CFLAGS@
OPENGL_LIBS = @OPENGL_LIBS@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PASS1_CFLAGS = @PASS1_CFLAGS@
PASS2_CFLAGS = @PASS2_CFLAGS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POFILES = @POFILES@
POLYPAUDIO_CFLAGS = @POLYPAUDIO_CFLAGS@
POLYPAUDIO_LIBS = @POLYPAUDIO_LIBS@
POSUB = @POSUB@
PPC_ARCH_FALSE = @PPC_ARCH_FALSE@
PPC_ARCH_TRUE = @PPC_ARCH_TRUE@
RANLIB = @RANLIB@
RT_LIBS = @RT_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SGMLTOOLS = @SGMLTOOLS@
SHELL = @SHELL@
SPEC_VERSION = @SPEC_VERSION@
SPEEX_CFLAGS = @SPEEX_CFLAGS@
SPEEX_LIBS = @SPEEX_LIBS@
STATIC = @STATIC@
STRIP = @STRIP@
SUNDGA_CFLAGS = @SUNDGA_CFLAGS@
SUNDGA_LIBS = @SUNDGA_LIBS@
TAR_NAME = @TAR_NAME@
THEORAENC_LIBS = @THEORAENC_LIBS@
THEORAFILE_LIBS = @THEORAFILE_LIBS@
THEORA_CFLAGS = @THEORA_CFLAGS@
THEORA_LIBS = @THEORA_LIBS@
THREAD_CFLAGS = @THREAD_CFLAGS@
THREAD_CFLAGS_CONFIG = @THREAD_CFLAGS_CONFIG@
THREAD_INCLUDES = @THREAD_INCLUDES@
THREAD_LIBS = @THREAD_LIBS@
THREAD_LIBS_CONFIG = @THREAD_LIBS_CONFIG@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VORBISENC_LIBS = @VORBISENC_LIBS@
VORBISFILE_LIBS = @VORBISFILE_LIBS@
VORBIS_CFLAGS = @VORBIS_CFLAGS@
VORBIS_LIBS = @VORBIS_LIBS@
W32DLL_DEP = @W32DLL_DEP@
W32_NO_OPTIMIZE = @W32_NO_OPTIMIZE@
WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
WIN32_FALSE = @WIN32_FALSE@
WIN32_TRUE = @WIN32_TRUE@
XGETTEXT = @XGETTEXT@
XINE_ACFLAGS = @XINE_ACFLAGS@
XINE_BIN_AGE = @XINE_BIN_AGE@
XINE_BUILD_CC = @XINE_BUILD_CC@
XINE_BUILD_DATE = @XINE_BUILD_DATE@
XINE_BUILD_OS = @XINE_BUILD_OS@
XINE_CONFIG_PREFIX = @XINE_CONFIG_PREFIX@
XINE_DATADIR = @XINE_DATADIR@
XINE_FONTDIR = @XINE_FONTDIR@
XINE_FONTPATH = @XINE_FONTPATH@
XINE_IFACE_AGE = @XINE_IFACE_AGE@
XINE_LOCALEDIR = @XINE_LOCALEDIR@
XINE_LOCALEPATH = @XINE_LOCALEPATH@
XINE_MAJOR = @XINE_MAJOR@
XINE_MINOR = @XINE_MINOR@
XINE_PLUGINDIR = @XINE_PLUGINDIR@
XINE_PLUGINPATH = @XINE_PLUGINPATH@
XINE_PLUGIN_MIN_SYMS = @XINE_PLUGIN_MIN_SYMS@
XINE_SCRIPTPATH = @XINE_SCRIPTPATH@
XINE_SUB = @XINE_SUB@
XVMC_LIB = @XVMC_LIB@
XV_LIB = @XV_LIB@
XXMC_LIB = @XXMC_LIB@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZLIB_INCLUDES = @ZLIB_INCLUDES@
ZLIB_LIBS = @ZLIB_LIBS@
ZLIB_LIBS_CONFIG = @ZLIB_LIBS_CONFIG@
ac_ct_AR = @ac_ct_AR@
ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
ac_ct_F77 = @ac_ct_F77@
ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__fastdepOBJC_FALSE = @am__fastdepOBJC_FALSE@
am__fastdepOBJC_TRUE = @am__fastdepOBJC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = $(XINE_PLUGINDIR)
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
w32_path = @w32_path@
XINE_LIB = $(top_builddir)/src/xine-engine/libxine.la
lib_LTLIBRARIES = xineplug_decode_real.la xineplug_decode_real_audio.la
xineplug_decode_real_la_SOURCES = xine_decoder.c
xineplug_decode_real_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS)
xineplug_decode_real_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@
xineplug_decode_real_audio_la_SOURCES = audio_decoder.c
xineplug_decode_real_audio_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS)
xineplug_decode_real_audio_la_LDFLAGS = -avoid-version -module @XINE_PLUGIN_MIN_SYMS@
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/misc/Makefile.common $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libreal/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/libreal/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
xineplug_decode_real.la: $(xineplug_decode_real_la_OBJECTS) $(xineplug_decode_real_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(xineplug_decode_real_la_LDFLAGS) $(xineplug_decode_real_la_OBJECTS) $(xineplug_decode_real_la_LIBADD) $(LIBS)
xineplug_decode_real_audio.la: $(xineplug_decode_real_audio_la_OBJECTS) $(xineplug_decode_real_audio_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(xineplug_decode_real_audio_la_LDFLAGS) $(xineplug_decode_real_audio_la_OBJECTS) $(xineplug_decode_real_audio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_decoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xine_decoder.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(mkdir_p) $(distdir)/../../misc
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-exec-am: install-libLTLIBRARIES
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am \
install-data-hook install-exec install-exec-am install-info \
install-info-am install-libLTLIBRARIES install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am uninstall-hook \
uninstall-info-am uninstall-libLTLIBRARIES
$(XINE_LIB):
@cd $(top_srcdir)/src/xine-engine && $(MAKE)
install-data-hook:
@if test $$MAKELEVEL -le 4 ; then \
if test -x "$(top_srcdir)/post-install.sh" ; then \
$(top_srcdir)/post-install.sh ; \
fi \
fi
pass1:
@$(MAKE) MULTIPASS_CFLAGS="$(PASS1_CFLAGS)"
pass2:
@$(MAKE) MULTIPASS_CFLAGS="$(PASS2_CFLAGS)"
debug:
@$(MAKE) CFLAGS="$(DEBUG_CFLAGS)"
install-debug: debug
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
@list='$(SUBDIRS)'; for subdir in $$list; do \
(cd $$subdir && $(MAKE) $@) || exit; \
done;
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
$(install_sh) -d $(DESTDIR)$(includedir)/xine
@list='$(include_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p"; \
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p; \
done
uninstall-includeHEADERS:
@$(NORMAL_UNINSTALL)
list='$(include_HEADERS)'; for p in $$list; do \
rm -f $(DESTDIR)$(includedir)/xine/$$p; \
done
uninstall-hook:
@if echo '$(libdir)' | egrep ^'$(XINE_PLUGINDIR)' >/dev/null; then \
list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(libdir)/$$p"; \
rm -f $(DESTDIR)$(libdir)/$$p; \
done; \
fi
mostlyclean-generic:
-rm -f *~ \#* .*~ .\#*
maintainer-clean-generic:
-@echo "This command is intended for maintainers to use;"
-@echo "it deletes files that may require special tools to rebuild."
-rm -f Makefile.in
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: