summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2008-01-05 02:21:39 +0100
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2008-01-05 02:21:39 +0100
commitfb84a946585c4fc5d86fd3de06127498bc58c0b1 (patch)
tree4c8360b2a2f425be682c9f9d4041c295f621031c
parent69f65972dc463cf4518fbc5472020c3644177537 (diff)
downloadxine-lib-fb84a946585c4fc5d86fd3de06127498bc58c0b1.tar.gz
xine-lib-fb84a946585c4fc5d86fd3de06127498bc58c0b1.tar.bz2
Now that FFmpeg is always used external, move the ffmpeg-based MPEG encoder
out of the FFmpeg decoding plugin and directly inside dxr3 plugin. This way there is no dlopen() required to open the plugin to read the init function from, there is no need for wrapper init/close functions, and the dxr3_encoder_init() function is no more exported by the plugin. --HG-- rename : src/combined/ffmpeg/ffmpeg_encoder.c => src/dxr3/ffmpeg_encoder.c
-rw-r--r--src/combined/ffmpeg/Makefile.am11
-rw-r--r--src/dxr3/Makefile.am5
-rw-r--r--src/dxr3/dxr3_mpeg_encoders.c37
-rw-r--r--src/dxr3/ffmpeg_encoder.c (renamed from src/combined/ffmpeg/ffmpeg_encoder.c)14
-rw-r--r--src/dxr3/video_out_dxr3.c17
5 files changed, 15 insertions, 69 deletions
diff --git a/src/combined/ffmpeg/Makefile.am b/src/combined/ffmpeg/Makefile.am
index 67c7c011a..c0eeccffd 100644
--- a/src/combined/ffmpeg/Makefile.am
+++ b/src/combined/ffmpeg/Makefile.am
@@ -4,21 +4,10 @@ AM_CFLAGS = $(DEFAULT_OCFLAGS) $(VISIBILITY_FLAG)
AM_CPPFLAGS = $(ZLIB_CPPFLAGS)
AM_LDFLAGS = $(xineplug_ldflags)
-# this must always be included, even if the current machine has no DXR3...
-EXTRA_DIST = ffmpeg_encoder.c
-
xineplug_LTLIBRARIES = xineplug_decode_ff.la
-if ENABLE_DXR3
-AM_CFLAGS += $(X_CFLAGS)
-AM_CPPFLAGS += -I$(top_srcdir)/src/dxr3
-xineplug_decode_ff_la_SOURCES = ffmpeg_decoder.c ff_audio_decoder.c ff_video_decoder.c \
- ffmpeg_encoder.c ff_mpeg_parser.c ffmpeg_decoder.h \
- ff_mpeg_parser.h
-else
xineplug_decode_ff_la_SOURCES = ffmpeg_decoder.c ff_audio_decoder.c ff_video_decoder.c \
ff_mpeg_parser.c ffmpeg_decoder.h ff_mpeg_parser.h
-endif
nodist_xineplug_decode_ff_la_SOURCES = ffmpeg_config.h
diff --git a/src/dxr3/Makefile.am b/src/dxr3/Makefile.am
index 541306ab9..0c0f4f979 100644
--- a/src/dxr3/Makefile.am
+++ b/src/dxr3/Makefile.am
@@ -39,9 +39,10 @@ endif
xineplug_vo_out_dxr3_la_SOURCES = \
dxr3_mpeg_encoders.c \
+ ffmpeg_encoder.c \
dxr3_spu_encoder.c \
dxr3_scr.c \
video_out_dxr3.c
-xineplug_vo_out_dxr3_la_CFLAGS = $(AM_CFLAGS) $(AVUTIL_CFLAGS)
-xineplug_vo_out_dxr3_la_LIBADD = $(XINE_LIB) $(link_fame) $(link_rte) $(link_x_libs) $(LTLIBINTL) $(DYNAMIC_LD_LIBS) $(AVUTIL_LIBS) -lm
+xineplug_vo_out_dxr3_la_CFLAGS = $(AM_CFLAGS) $(AVUTIL_CFLAGS) $(FFMPEG_CFLAGS)
+xineplug_vo_out_dxr3_la_LIBADD = $(XINE_LIB) $(link_fame) $(link_rte) $(link_x_libs) $(LTLIBINTL) $(DYNAMIC_LD_LIBS) $(AVUTIL_LIBS) $(FFMPEG_LDFLAGS) -lm
diff --git a/src/dxr3/dxr3_mpeg_encoders.c b/src/dxr3/dxr3_mpeg_encoders.c
index d32a298a6..2ccc05e49 100644
--- a/src/dxr3/dxr3_mpeg_encoders.c
+++ b/src/dxr3/dxr3_mpeg_encoders.c
@@ -110,13 +110,6 @@ static int fame_prepare_frame(fame_data_t *this, dxr3_driver_t *drv,
dxr3_frame_t *frame);
#endif
-/* initialization function */
-int dxr3_lavc_init(dxr3_driver_t *drv, plugin_node_t *node);
-
-/* close function from encoder api */
-static int lavc_on_close(dxr3_driver_t *drv);
-
-
#ifdef HAVE_LIBRTE
int dxr3_rte_init(dxr3_driver_t *drv)
{
@@ -538,33 +531,3 @@ static int fame_prepare_frame(fame_data_t *this, dxr3_driver_t *drv, dxr3_frame_
return 1;
}
#endif
-
-
-int dxr3_lavc_init(dxr3_driver_t *drv, plugin_node_t *node)
-{
- void *ffmpeg;
- int (*init)(dxr3_driver_t *);
- int result;
-
- ffmpeg = dlopen(node->file->filename, RTLD_LAZY);
- if (!ffmpeg) return 0;
-
- init = dlsym(ffmpeg, "dxr3_encoder_init");
- if (!init) return 0;
-
- result = init(drv);
- /* the close function is implemented here, because it will call dlclose()
- * and that should not be done be the library we are closing... */
- drv->enc->on_close = lavc_on_close;
- drv->enc->handle = ffmpeg;
- return result;
-}
-
-static int lavc_on_close(dxr3_driver_t *drv)
-{
- drv->enc->on_unneeded(drv);
- dlclose(drv->enc->handle);
- free(drv->enc);
- drv->enc = NULL;
- return 1;
-}
diff --git a/src/combined/ffmpeg/ffmpeg_encoder.c b/src/dxr3/ffmpeg_encoder.c
index f7401f6ab..d9ee921cc 100644
--- a/src/combined/ffmpeg/ffmpeg_encoder.c
+++ b/src/dxr3/ffmpeg_encoder.c
@@ -45,9 +45,6 @@
#define DEFAULT_BUFFER_SIZE 512*1024
-/*initialisation function, used by the dxr3 plugin */
-int dxr3_encoder_init(dxr3_driver_t *drv) EXPORTED;
-
/* functions required by encoder api */
static int lavc_on_update_format(dxr3_driver_t *drv, dxr3_frame_t *frame);
static int lavc_on_display_frame(dxr3_driver_t *drv, dxr3_frame_t *frame);
@@ -65,7 +62,7 @@ typedef struct lavc_data_s {
} lavc_data_t;
-int dxr3_encoder_init(dxr3_driver_t *drv)
+int dxr3_lavc_init(dxr3_driver_t *drv)
{
lavc_data_t* this;
avcodec_init();
@@ -83,6 +80,15 @@ int dxr3_encoder_init(dxr3_driver_t *drv)
this->context = 0;
drv->enc = &this->encoder_data;
+ drv->enc->on_close = dxr3_lavc_close;
+ return 1;
+}
+
+static int dxr3_lavc_close(dxr3_driver_t *drv) {
+ drv->enc->on_unneeded(drv);
+ free(drv->enc);
+ drv->enc = NULL;
+
return 1;
}
diff --git a/src/dxr3/video_out_dxr3.c b/src/dxr3/video_out_dxr3.c
index 5559f18ca..20cee345b 100644
--- a/src/dxr3/video_out_dxr3.c
+++ b/src/dxr3/video_out_dxr3.c
@@ -286,21 +286,8 @@ static vo_driver_t *dxr3_vo_open_plugin(video_driver_class_t *class_gen, const v
#if LOG_VID
printf("video_out_dxr3: Supported mpeg encoders: ");
#endif
- /* check, if ffmpeg plugin is available by looking through plugin
- * catalog; catalog mutex is already locked here, since this is open_plugin() */
- node = NULL;
- plugin_list = class->xine->plugin_catalog->plugin_lists[PLUGIN_VIDEO_DECODER - 1];
- list_size = xine_sarray_size(plugin_list);
- for (list_id = 0; list_id < list_size; list_id++) {
- node = xine_sarray_get (plugin_list, list_id);
- if (strcasecmp(node->info->id, "ffmpegvideo") == 0) {
- available_encoders[encoder++] = "libavcodec";
-#if LOG_VID
- printf("libavcodec, ");
-#endif
- break;
- }
- }
+ available_encoders[encoder++] = "libavcodec";
+ printf("libavcodec, ");
#ifdef HAVE_LIBFAME
available_encoders[encoder++] = "fame";
#if LOG_VID