Commit a519cacc authored by Antoine Cellerier's avatar Antoine Cellerier

Split ffmpeg module in avcodec (decoders, encoders, deinterlacing), avformat...

Split ffmpeg module in avcodec (decoders, encoders, deinterlacing), avformat (demuxers, muxers), swscale (scaling, chroma conversion) and postproc modules.
parent 7f9999df
......@@ -192,7 +192,7 @@ case "${host_os}" in
VLC_ADD_LDFLAGS([mkv mp4], [-Wl,-framework,IOKit,-framework,CoreFoundation])
VLC_ADD_LDFLAGS([vlc],[-Wl,-undefined,dynamic_lookup])
VLC_ADD_LDFLAGS([libvlc_control],[-Wl,dynamic_lookup])
VLC_ADD_LDFLAGS([ffmpeg i420_rgb_mmx x264],[-Wl,-read_only_relocs,suppress])
VLC_ADD_LDFLAGS([avcodec avformat swscale postproc i420_rgb_mmx x264],[-Wl,-read_only_relocs,suppress])
VLC_ADD_CFLAGS([motion],[-fconstant-cfstrings])
VLC_ADD_LDFLAGS([libvlc],[-Wl,-framework,Cocoa,-framework,CoreFoundation])
VLC_ADD_LDFLAGS([motion],[-Wl,-framework,IOKit,-framework,CoreFoundation])
......@@ -645,7 +645,7 @@ AC_CHECK_LIB(m,cos,[
VLC_ADD_LIBS([adjust wave ripple psychedelic gradient a52tofloat32 dtstofloat32 x264 goom visual panoramix rotate noise grain],[-lm])
])
AC_CHECK_LIB(m,pow,[
VLC_ADD_LIBS([ffmpeg ffmpegaltivec stream_out_transrate i420_rgb faad twolame equalizer spatializer param_eq libvlc vorbis freetype mod mpc dmo quicktime realaudio realvideo galaktos opengl],[-lm])
VLC_ADD_LIBS([avcodec avformat swscale postproc ffmpegaltivec stream_out_transrate i420_rgb faad twolame equalizer spatializer param_eq libvlc vorbis freetype mod mpc dmo quicktime realaudio realvideo galaktos opengl],[-lm])
])
AC_CHECK_LIB(m,sqrt,[
VLC_ADD_LIBS([headphone_channel_mixer normvol speex mono colorthres extract],[-lm])
......@@ -2993,102 +2993,98 @@ AS_IF([test "${enable_id3tag}" != "no"], [
])
dnl
dnl ffmpeg decoder/demuxer plugin
dnl avcodec decoder/encoder plugin
dnl
dnl we try to find ffmpeg using : 1- given tree, 2- pkg-config
dnl 3- default place,
AC_ARG_ENABLE(ffmpeg,
[ --enable-ffmpeg ffmpeg codec (default enabled)])
if test "${enable_ffmpeg}" != "no"
AC_ARG_ENABLE(avcodec,
[ --enable-avcodec libavcodec codec (default enabled)])
if test "${enable_avcodec}" != "no"
then
PKG_CHECK_MODULES(AVCODEC,[libavcodec, libavutil],
[
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
AC_CHECK_HEADERS(libavcodec/avcodec.h ffmpeg/avcodec.h)
AC_CHECK_HEADERS(libavutil/avutil.h ffmpeg/avutil.h)
VLC_ADD_PLUGIN([avcodec])
VLC_ADD_LIBS([avcodec],[$AVCODEC_LIBS])
VLC_ADD_CFLAGS([avcodec],[$AVCODEC_CFLAGS])
VLC_RESTORE_FLAGS
],[
AC_MSG_ERROR([Could not find libavcodec or libavutil.])
])
fi
dnl
dnl avformat demuxer/muxer plugin
dnl
dnl Trying with pkg-config
PKG_CHECK_MODULES(FFMPEG,[libavcodec, libavformat, libavutil],
AC_ARG_ENABLE(avformat,
[ --enable-avformat libavformat containers (default enabled)])
if test "${enable_avformat}" != "no"
then
PKG_CHECK_MODULES(AVFORMAT,[libavformat, libavcodec, libavutil],
[
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${FFMPEG_CFLAGS}"
CFLAGS="${CFLAGS} ${FFMPEG_CFLAGS}"
AC_CHECK_HEADERS(ffmpeg/avcodec.h libavcodec/avcodec.h)
AC_CHECK_HEADERS(ffmpeg/avformat.h libavformat/avformat.h)
AC_CHECK_HEADERS(ffmpeg/avutil.h libavutil/avutil.h)
dnl newer ffmpeg have a separate libpostproc
PKG_CHECK_MODULES(POSTPROC, libpostproc,[
VLC_ADD_CFLAGS([ffmpeg],[${POSTPROC_CFLAGS}])
VLC_ADD_LIBS([ffmpeg],[${POSTPROC_LIBS}])
])
CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
AC_CHECK_HEADERS(postproc/postprocess.h)
VLC_ADD_PLUGIN([ffmpeg])
if test "${enable_sout}" != "no" -a "${enable_switcher}" = "yes"; then
VLC_ADD_PLUGIN([stream_out_switcher])
fi
VLC_ADD_CFLAGS([ffmpeg stream_out_switcher],[${FFMPEG_CFLAGS}])
VLC_ADD_LIBS([ffmpeg stream_out_switcher],[${FFMPEG_LIBS}])
dnl even newer ffmpeg has a libswscale
PKG_CHECK_MODULES(SWSCALE,[libswscale],[
VLC_ADD_CFLAGS([ffmpeg],[${SWSCALE_CFLAGS}])
VLC_ADD_LIBS([ffmpeg],[${SWSCALE_LIBS}])
AC_CHECK_LIB(swscale, sws_getContext,
[AC_CHECK_HEADERS([ffmpeg/swscale.h libswscale/swscale.h])],
[AC_CHECK_LIB(avcodec,img_resample,[],
[AC_MSG_ERROR([Your FFmpeg library doesn't have the needed img_resample() function. You should rebuild it with software scaler disabled, or install the swscale headers.])],
[${FFMPEG_LIBS}])
],
[${SWSCALE_LIBS}])
],[AC_CHECK_LIB(avcodec,img_resample,[],
[AC_MSG_ERROR([Your FFmpeg library doesn't have the needed img_resample() function. You should rebuild it with software scaler disabled, or install the swscale headers.])],
[${FFMPEG_LIBS}])
]
)
VLC_RESTORE_FLAGS
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${AVFORMAT_CFLAGS}"
CFLAGS="${CFLAGS} ${AVFORMAT_CFLAGS}"
AC_CHECK_HEADERS(libavformat/avformat.h ffmpeg/avformat.h)
AC_CHECK_HEADERS(libavcodec/avcodec.h ffmpeg/avcodec.h)
AC_CHECK_HEADERS(libavutil/avutil.h ffmpeg/avutil.h)
VLC_ADD_PLUGIN([avformat])
VLC_ADD_LIBS([avformat],[$AVFORMAT_LIBS])
VLC_ADD_CFLAGS([avformat],[$AVFORMAT_CFLAGS])
VLC_RESTORE_FLAGS
],[
AC_MSG_ERROR([Could not find libavformat, libavcodec or libavutil.])
])
fi
],[
dnl
dnl swscale image scaling and conversion plugin
dnl
dnl
dnl last chance: at the default place
dnl
AC_ARG_ENABLE(swscale,
[ --enable-swscale libswscale image scaling and conversion (default enabled)])
if test "${enable_swscale}" != "no"
then
PKG_CHECK_MODULES(SWSCALE,[libswscale, libavutil],
[
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS_save} ${CPPFLAGS_ffmpeg}"
LDFLAGS="${LDFLAGS_save} ${LDFLAGS_ffmpeg} ${LIBS_ffmpeg}"
AC_CHECK_HEADERS(ffmpeg/avcodec.h libavcodec/avcodec.h)
AC_CHECK_HEADERS(ffmpeg/avformat.h libavformat/avformat.h)
AC_CHECK_HEADERS(ffmpeg/avutil.h libavutil/avutil.h)
AC_CHECK_HEADERS(postproc/postprocess.h)
AC_CHECK_LIB(avutil, av_crc_init, [
VLC_ADD_LIBS([ffmpeg],[-lavutil])
LDAVUTIL="-lavutil"])
AC_CHECK_LIB(avcodec, avcodec_init, [
VLC_ADD_BUILTINS([ffmpeg])
VLC_ADD_LIBS([ffmpeg],[-lavcodec])
if test "${enable_sout}" != "no" -a "${enable_switcher}" = "yes"; then
VLC_ADD_BUILTINS([stream_out_switcher])
fi],
[ AC_MSG_ERROR([Could not find ffmpeg on your system: you may get it from http://ffmpeg.sf.net/ (svn version is recommended). Alternatively you can use --disable-ffmpeg to disable the ffmpeg plugins.]) ], [$LDAVUTIL])
AC_CHECK_LIB(postproc, pp_postprocess, [
VLC_ADD_LIBS([ffmpeg],[-lpostproc])],
AC_MSG_ERROR([Could not find libpostproc inside FFmpeg. You should configure FFmpeg with --enable-gpl --enable-postproc.]),
[$LDAVUTIL])
AC_CHECK_LIB(avformat, av_open_input_stream, [
VLC_ADD_LIBS([ffmpeg],[-lavformat -lz]) ], [], [-lavcodec -lz $LDAVUTIL])
CPPFLAGS="${CPPFLAGS} ${SWSCALE_CFLAGS}"
CFLAGS="${CFLAGS} ${SWSCALE_CFLAGS}"
AC_CHECK_HEADERS(libswscale/swscale.h ffmpeg/swscale.h)
AC_CHECK_HEADERS(libavutil/avutil.h ffmpeg/avutil.h)
VLC_ADD_PLUGIN([swscale])
VLC_ADD_LIBS([swscale],[$SWSCALE_LIBS])
VLC_ADD_CFLAGS([swscale],[$SWSCALE_CFLAGS])
VLC_RESTORE_FLAGS
],[
AC_MSG_ERROR([Could not find libswscale or libavutil.])
])
fi
AC_CHECK_LIB(swscale, sws_getContext, [
AC_CHECK_HEADERS(ffmpeg/swscale.h libswscale/swscale.h)
VLC_ADD_LIBS([ffmpeg],[-lswscale]) ],
[AC_CHECK_LIB(avcodec,img_resample,[],
[AC_MSG_ERROR([Your FFmpeg library doesn't have the needed img_resample() function. You should rebuild it with software scaler disabled, or install the swscale headers.])],
[-lavcodec $LDAVUTIL])
],
[${SWSCALE_LIBS}])
dnl
dnl postproc plugin
dnl
AC_ARG_ENABLE(postproc,
[ --enable-postproc libpostproc image post-processing (default enabled)])
if test "${enable_postproc}" != "no"
then
PKG_CHECK_MODULES(POSTPROC,[libpostproc],
[
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
AC_CHECK_HEADERS(libpostproc/postproc.h ffmpeg/postproc.h)
VLC_ADD_PLUGIN([postproc])
VLC_ADD_LIBS([postproc],[$POSTPROC_LIBS])
VLC_ADD_CFLAGS([postproc],[$POSTPROC_CFLAGS])
VLC_RESTORE_FLAGS
],[
AC_MSG_ERROR([Could not find libpostproc.])
])
fi
......
SOURCES_ffmpeg = \
ffmpeg.c \
ffmpeg.h \
SOURCES_avcodec = \
avcodec.c \
avcodec.h \
video.c \
audio.c \
video_filter.c \
deinterlace.c \
chroma.c \
postprocess.c \
demux.c \
scale.c \
$(NULL)
EXTRA_libffmpeg_plugin_la_SOURCES = \
mux.c \
if ENABLE_SOUT
SOURCES_avcodec += encoder.c
endif
EXTRA_libavcodec_plugin_la_SOURCES = \
encoder.c \
$(NULL)
SOURCES_avformat = \
avformat.c \
avformat.h \
demux.c \
$(NULL)
if ENABLE_SOUT
SOURCES_ffmpeg += mux.c encoder.c
SOURCES_avformat += mux.c
endif
libvlc_LTLIBRARIES += $(LTLIBffmpeg)
EXTRA_LTLIBRARIES += libffmpeg_plugin.la
SOURCES_ffmpegaltivec = \
ffmpeg.c \
ffmpeg.h \
video.c \
audio.c \
EXTRA_libavformat_plugin_la_SOURCES = \
mux.c \
$(NULL)
SOURCES_swscale = \
swscale.c \
swscale.h \
video_filter.c \
deinterlace.c \
chroma.c \
encoder.c \
postprocess.c \
demux.c \
mux.c \
scale.c \
$(NULL)
SOURCES_postproc = \
postproc.c \
postprocess.c \
$(NULL)
libvlc_LTLIBRARIES += \
$(LTLIBavcodec) \
$(LTLIBavformat) \
$(LTLIBswscale) \
$(LTLIBpostproc)
EXTRA_LTLIBRARIES += \
libavcodec_plugin.la \
libavformat_plugin.la \
libswscale_plugin.la \
libpostproc_plugin.la
# FIXME SOURCES_ffmpegaltivec = \
# FIXME ffmpeg.c \
# FIXME ffmpeg.h \
# FIXME video.c \
# FIXME audio.c \
# FIXME video_filter.c \
# FIXME deinterlace.c \
# FIXME chroma.c \
# FIXME encoder.c \
# FIXME postprocess.c \
# FIXME demux.c \
# FIXME mux.c \
# FIXME scale.c \
# FIXME $(NULL)
This diff is collapsed.
This diff is collapsed.
......@@ -48,7 +48,6 @@
#include "ffmpeg.h"
#if !defined(HAVE_LIBSWSCALE_SWSCALE_H) && !defined(HAVE_FFMPEG_SWSCALE_H)
void InitLibavcodec ( vlc_object_t *p_object );
static void ChromaConversion( vout_thread_t *, picture_t *, picture_t * );
/*****************************************************************************
......@@ -123,9 +122,6 @@ int OpenChroma( vlc_object_t *p_this )
p_filter->p_sys->p_rsc = NULL;
}
/* libavcodec needs to be initialized for some chroma conversions */
InitLibavcodec(p_this);
return VLC_SUCCESS;
}
......
This diff is collapsed.
......@@ -219,12 +219,12 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec,
p_pic = p_dec->pf_vout_buffer_new( p_dec );
if( p_sys->p_pp && p_sys->b_pp && !p_sys->b_pp_init )
{
InitPostproc( p_sys->p_pp, p_context->width,
p_context->height, p_context->pix_fmt );
p_sys->b_pp_init = true;
}
// FIXME if( p_sys->p_pp && p_sys->b_pp && !p_sys->b_pp_init )
// FIXME {
// FIXME InitPostproc( p_sys->p_pp, p_context->width,
// FIXME p_context->height, p_context->pix_fmt );
// FIXME p_sys->b_pp_init = true;
// FIXME }
return p_pic;
}
......@@ -361,7 +361,7 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
p_sys->p_pp = NULL;
p_sys->b_pp = p_sys->b_pp_async = p_sys->b_pp_init = false;
p_sys->p_pp = OpenPostproc( p_dec, &p_sys->b_pp_async );
// FIXME p_sys->p_pp = OpenPostproc( p_dec, &p_sys->b_pp_async );
/* ffmpeg doesn't properly release old pictures when frames are skipped */
//if( p_sys->b_hurry_up ) p_sys->b_direct_rendering = 0;
......@@ -724,7 +724,7 @@ void EndVideoDec( decoder_t *p_dec )
decoder_sys_t *p_sys = p_dec->p_sys;
if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic );
ClosePostproc( p_dec, p_sys->p_pp );
// FIXME ClosePostproc( p_dec, p_sys->p_pp );
free( p_sys->p_buffer_orig );
}
......@@ -819,9 +819,9 @@ static void ffmpeg_CopyPicture( decoder_t *p_dec,
uint8_t *p_dst, *p_src;
int i_src_stride, i_dst_stride;
if( p_sys->p_pp && p_sys->b_pp )
PostprocPict( p_sys->p_pp, p_pic, p_ff_pic );
else
// FIXME if( p_sys->p_pp && p_sys->b_pp )
// FIXME PostprocPict( p_sys->p_pp, p_pic, p_ff_pic );
// FIXME else
{
for( i_plane = 0; i_plane < p_pic->i_planes; i_plane++ )
{
......
......@@ -46,7 +46,6 @@
#include "ffmpeg.h"
#if !defined(HAVE_LIBSWSCALE_SWSCALE_H) && !defined(HAVE_FFMPEG_SWSCALE_H)
void InitLibavcodec ( vlc_object_t *p_object );
static int CheckInit( filter_t *p_filter );
static picture_t *Process( filter_t *p_filter, picture_t *p_pic );
......@@ -150,9 +149,6 @@ static int OpenFilterEx( vlc_object_t *p_this, bool b_enable_croppadd )
p_filter->fmt_out.video.i_width, p_filter->fmt_out.video.i_height,
(char *)&p_filter->fmt_out.video.i_chroma );
/* libavcodec needs to be initialized for some chroma conversions */
InitLibavcodec(p_this);
return VLC_SUCCESS;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment