Skip to content

Commit

Permalink
Merge branch 'ffmpeg-update'
Browse files Browse the repository at this point in the history
Conflicts:
	lib/ffmpeg/build_xbmc_win32.sh
  • Loading branch information
anssih committed Feb 5, 2011
2 parents 1c077c7 + 011b1b2 commit d21c544
Show file tree
Hide file tree
Showing 1,254 changed files with 71,728 additions and 35,283 deletions.
4 changes: 3 additions & 1 deletion Makefile.include.in
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ LDFLAGS+=@LDFLAGS@
INCLUDES+=$(sort @INCLUDES@)
INCLUDES+=-I@abs_top_srcdir@/lib
INCLUDES+=-I@abs_top_srcdir@/xbmc
INCLUDES+=-I@abs_top_srcdir@/lib/ffmpeg
ifneq (@USE_EXTERNAL_FFMPEG@,1)
INCLUDES+=-I@abs_top_srcdir@/lib/ffmpeg
endif
INCLUDES+=-I@abs_top_srcdir@/xbmc/linux
DEFINES+= \
-D_LINUX \
Expand Down
11 changes: 9 additions & 2 deletions configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,12 @@ fi
### External libraries checks
# External FFmpeg
if test "$use_external_ffmpeg" = "yes"; then
PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libpostproc libswscale],
FFMPEG_LIBNAMES="libavcodec libavformat libavutil libpostproc libswscale"

# libavcore is optional
PKG_CHECK_EXISTS([libavcore], FFMPEG_LIBNAMES="$FFMPEG_LIBNAMES libavcore")

PKG_CHECK_MODULES([FFMPEG], [$FFMPEG_LIBNAMES],
[INCLUDES="$INCLUDES $FFMPEG_CFLAGS"; LIBS="$LIBS $FFMPEG_LIBS"],
AC_MSG_ERROR($missing_library))

Expand All @@ -848,6 +853,9 @@ if test "$use_external_ffmpeg" = "yes"; then
[AC_CHECK_HEADERS([ffmpeg/avcodec.h ffmpeg/avformat.h ffmpeg/avutil.h postproc/postprocess.h ffmpeg/swscale.h],,
[AC_MSG_ERROR($missing_headers)])])

# libavcore is optional
AC_CHECK_HEADERS([libavcore/avcore.h libavcore/samplefmt.h])

# We'll support the use of rgb2rgb.h if it exists.
AC_CHECK_HEADERS([libswscale/rgb2rgb.h],,)
AC_CHECK_HEADERS([ffmpeg/rgb2rgb.h],,)
Expand Down Expand Up @@ -1682,7 +1690,6 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
--enable-gpl \
`if test "x$use_vdpau" != "xno"; then echo --enable-vdpau; else echo --disable-vdpau; fi` \
`if test "x$use_vaapi" != "xno"; then echo --enable-vaapi; else echo --disable-vaapi; fi` \
--enable-libfaad \
--enable-protocol=http \
--enable-pthreads \
--enable-runtime-cpudetect \
Expand Down
203 changes: 73 additions & 130 deletions lib/DllAvCodec.h

Large diffs are not rendered by default.

176 changes: 176 additions & 0 deletions lib/DllAvCore.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#pragma once
/*
* Copyright (C) 2005-2010 Team XBMC
* http://www.xbmc.org
*
* This Program 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.
*
* This Program 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 XBMC; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/

#if (defined HAVE_CONFIG_H) && (!defined WIN32)
#include "config.h"
#endif
#include "DynamicDll.h"
#include "DllAvUtil.h"
#include "utils/log.h"

extern "C" {
#ifdef USE_EXTERNAL_FFMPEG
#ifdef HAVE_LIBAVCORE_AVCORE_H
#include <libavcore/avcore.h>
#endif
#ifdef HAVE_LIBAVCORE_SAMPLEFMT_H
#include <libavcore/samplefmt.h>
#endif

/* Needed for old FFmpeg versions as used below */
#ifdef HAVE_LIBAVCODEC_AVCODEC_H
#include <libavcodec/avcodec.h>
#else
#include <ffmpeg/avcodec.h>
#endif
#else
#include "libavcore/avcore.h"
#include "libavcore/samplefmt.h"
#endif
}

/* Compatibility for old external FFmpeg versions. */

#ifdef USE_EXTERNAL_FFMPEG

#ifndef LIBAVCORE_VERSION_INT
// API added on: 2010-07-21
#define LIBAVCORE_VERSION_INT 0
#endif

#if LIBAVCORE_VERSION_INT < AV_VERSION_INT(0,10,0)
// API added on: 2010-11-02
#define AVSampleFormat SampleFormat
#define AV_SAMPLE_FMT_NONE SAMPLE_FMT_NONE
#define AV_SAMPLE_FMT_U8 SAMPLE_FMT_U8
#define AV_SAMPLE_FMT_S16 SAMPLE_FMT_S16
#define AV_SAMPLE_FMT_S32 SAMPLE_FMT_S32
#define AV_SAMPLE_FMT_FLT SAMPLE_FMT_FLT
#define AV_SAMPLE_FMT_DBL SAMPLE_FMT_DBL
#endif

#if LIBAVCORE_VERSION_INT < AV_VERSION_INT(0,14,0)
// API added on: 2010-11-21
#define AV_CH_FRONT_LEFT CH_FRONT_LEFT
#define AV_CH_FRONT_RIGHT CH_FRONT_RIGHT
#define AV_CH_FRONT_CENTER CH_FRONT_CENTER
#define AV_CH_LOW_FREQUENCY CH_LOW_FREQUENCY
#define AV_CH_BACK_LEFT CH_BACK_LEFT
#define AV_CH_BACK_RIGHT CH_BACK_RIGHT
#define AV_CH_FRONT_LEFT_OF_CENTER CH_FRONT_LEFT_OF_CENTER
#define AV_CH_FRONT_RIGHT_OF_CENTER CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_BACK_CENTER CH_BACK_CENTER
#define AV_CH_SIDE_LEFT CH_SIDE_LEFT
#define AV_CH_SIDE_RIGHT CH_SIDE_RIGHT
#define AV_CH_TOP_CENTER CH_TOP_CENTER
#define AV_CH_TOP_FRONT_LEFT CH_TOP_FRONT_LEFT
#define AV_CH_TOP_FRONT_CENTER CH_TOP_FRONT_CENTER
#define AV_CH_TOP_FRONT_RIGHT CH_TOP_FRONT_RIGHT
#define AV_CH_TOP_BACK_LEFT CH_TOP_BACK_LEFT
#define AV_CH_TOP_BACK_CENTER CH_TOP_BACK_CENTER
#define AV_CH_TOP_BACK_RIGHT CH_TOP_BACK_RIGHT
#define AV_CH_STEREO_LEFT CH_STEREO_LEFT
#define AV_CH_STEREO_RIGHT CH_STEREO_RIGHT

#define AV_CH_LAYOUT_NATIVE CH_LAYOUT_NATIVE

#define AV_CH_LAYOUT_MONO CH_LAYOUT_MONO
#define AV_CH_LAYOUT_STEREO CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_2_1 CH_LAYOUT_2_1
#define AV_CH_LAYOUT_SURROUND CH_LAYOUT_SURROUND
#define AV_CH_LAYOUT_4POINT0 CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_2_2 CH_LAYOUT_2_2
#define AV_CH_LAYOUT_QUAD CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_5POINT0 CH_LAYOUT_5POINT0
#define AV_CH_LAYOUT_5POINT1 CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT0_BACK CH_LAYOUT_5POINT0_BACK
#define AV_CH_LAYOUT_5POINT1_BACK CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_7POINT0 CH_LAYOUT_7POINT0
#define AV_CH_LAYOUT_7POINT1 CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1_WIDE CH_LAYOUT_7POINT1_WIDE
#define AV_CH_LAYOUT_STEREO_DOWNMIX CH_LAYOUT_STEREO_DOWNMIX
#endif

#endif // USE_EXTERNAL_FFMPEG

class DllAvCoreInterface
{
public:
virtual ~DllAvCoreInterface() {}
virtual int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt) = 0;
};

#if (defined USE_EXTERNAL_FFMPEG)

// Use direct layer
class DllAvCore : public DllDynamic, DllAvCoreInterface
{
public:
virtual ~DllAvCore() {}
#if LIBAVCORE_VERSION_INT >= AV_VERSION_INT(0,12,0)
// API added on: 2010-11-02
virtual int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt) { return ::av_get_bits_per_sample_fmt(sample_fmt); }
#else
// from avcodec.h
virtual int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt) { return ::av_get_bits_per_sample_format(sample_fmt); }
#endif

// DLL faking.
virtual bool ResolveExports() { return true; }
virtual bool Load() {
#if LIBAVCORE_VERSION_INT > 0
CLog::Log(LOGDEBUG, "DllAvCore: Using libavcore system library");
#endif
return true;
}
virtual void Unload() {}
};

#else

class DllAvCore : public DllDynamic, DllAvCoreInterface
{
DECLARE_DLL_WRAPPER(DllAvCore, DLL_PATH_LIBAVCORE)

LOAD_SYMBOLS()

DEFINE_METHOD1(int, av_get_bits_per_sample_fmt, (enum AVSampleFormat p1))

BEGIN_METHOD_RESOLVE()
RESOLVE_METHOD(av_get_bits_per_sample_fmt)
END_METHOD_RESOLVE()

/* dependency of libavcore */
DllAvUtil m_dllAvUtil;

public:
virtual bool Load()
{
if (!m_dllAvUtil.Load())
return false;
return DllDynamic::Load();
}
};

#endif

26 changes: 24 additions & 2 deletions lib/DllAvFormat.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,12 @@ class DllAvFormat : public DllDynamic, DllAvFormatInterface
virtual void av_register_all_dont_call() { *(int* )0x0 = 0; }
virtual AVInputFormat *av_find_input_format(const char *short_name) { return ::av_find_input_format(short_name); }
virtual int url_feof(ByteIOContext *s) { return ::url_feof(s); }
#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,31,0)
// API added on: 2009-03-01
virtual AVMetadataTag *av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int flags){ return ::av_metadata_get(m, key, prev, flags); }
#else
virtual AVMetadataTag *av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int flags){ return NULL; }
#endif
virtual void av_close_input_file(AVFormatContext *s) { ::av_close_input_file(s); }
virtual void av_close_input_stream(AVFormatContext *s) { ::av_close_input_stream(s); }
virtual int av_read_frame(AVFormatContext *s, AVPacket *pkt) { return ::av_read_frame(s, pkt); }
Expand Down Expand Up @@ -178,10 +183,14 @@ class DllAvFormat : public DllDynamic, DllAvFormatInterface
virtual int av_write_header (AVFormatContext *s) { return ::av_write_header (s); }
virtual int av_write_trailer(AVFormatContext *s) { return ::av_write_trailer(s); }
virtual int av_write_frame (AVFormatContext *s, AVPacket *pkt) { return ::av_write_frame(s, pkt); }
#if LIBAVFORMAT_VERSION_INT <= (52<<16 | 31<<8)
#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,43,0)
// API added on: 2009-12-13
virtual int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags) { return ::av_metadata_set2(pm, key, value, flags); }
#elif LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,31,0)
// API added on: 2009-03-01
virtual int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags) { return ::av_metadata_set(pm, key, value); }
#else
virtual int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags) { return ::av_metadata_set2(pm, key, value, flags); }
virtual int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int flags) { return -1; }
#endif

// DLL faking.
Expand Down Expand Up @@ -313,6 +322,12 @@ class DllAvFormat : public DllDynamic, DllAvFormatInterface
RESOLVE_METHOD(av_write_frame)
RESOLVE_METHOD(av_metadata_set2)
END_METHOD_RESOLVE()

/* dependencies of libavformat */
DllAvCodec m_dllAvCodec;
// DllAvCore loaded implicitely by m_dllAvCodec
// DllAvUtil loaded implicitely by m_dllAvCodec

public:
void av_register_all()
{
Expand All @@ -324,6 +339,13 @@ class DllAvFormat : public DllDynamic, DllAvFormatInterface
CSingleLock lock(DllAvCodec::m_critSection);
return(av_find_stream_info_dont_call(ic));
}

virtual bool Load()
{
if (!m_dllAvCodec.Load())
return false;
return DllDynamic::Load();
}
};

#endif
Loading

0 comments on commit d21c544

Please sign in to comment.