399 lines
15 KiB
Diff
399 lines
15 KiB
Diff
patch from: http://www.linuxfromscratch.org/blfs/view/svn/multimedia/opal.html
|
|
|
|
Submitted By: Igor Živković <contact@igor-zivkovic.from.hr>
|
|
Date: 2013-10-08
|
|
Initial Package Version: 3.10.10
|
|
Upstream Status: Unknown
|
|
Origin: Gentoo
|
|
Description: Fixes building against FFmpeg version >= 2.0.0
|
|
|
|
diff -Naur opal-3.10.10.orig/plugins/video/common/dyna.cxx opal-3.10.10/plugins/video/common/dyna.cxx
|
|
--- opal-3.10.10.orig/plugins/video/common/dyna.cxx 2013-02-20 03:18:05.000000000 +0100
|
|
+++ plugins/video/common/dyna.cxx 2013-10-08 12:57:25.058873513 +0200
|
|
@@ -210,7 +210,7 @@
|
|
#endif
|
|
|
|
|
|
-FFMPEGLibrary::FFMPEGLibrary(CodecID codec)
|
|
+FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec)
|
|
{
|
|
m_codec = codec;
|
|
if (m_codec==CODEC_ID_H264)
|
|
@@ -348,12 +348,12 @@
|
|
return true;
|
|
}
|
|
|
|
-AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id)
|
|
+AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum AVCodecID id)
|
|
{
|
|
return Favcodec_find_encoder(id);
|
|
}
|
|
|
|
-AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id)
|
|
+AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum AVCodecID id)
|
|
{
|
|
WaitAndSignal m(processLock);
|
|
|
|
diff -Naur opal-3.10.10.orig/plugins/video/common/dyna.h opal-3.10.10/plugins/video/common/dyna.h
|
|
--- opal-3.10.10.orig/plugins/video/common/dyna.h 2013-02-20 03:18:05.000000000 +0100
|
|
+++ plugins/video/common/dyna.h 2013-10-08 12:57:25.058873513 +0200
|
|
@@ -88,13 +88,13 @@
|
|
class FFMPEGLibrary
|
|
{
|
|
public:
|
|
- FFMPEGLibrary(CodecID codec);
|
|
+ FFMPEGLibrary(AVCodecID codec);
|
|
~FFMPEGLibrary();
|
|
|
|
bool Load();
|
|
|
|
- AVCodec *AvcodecFindEncoder(enum CodecID id);
|
|
- AVCodec *AvcodecFindDecoder(enum CodecID id);
|
|
+ AVCodec *AvcodecFindEncoder(enum AVCodecID id);
|
|
+ AVCodec *AvcodecFindDecoder(enum AVCodecID id);
|
|
AVCodecContext *AvcodecAllocContext(void);
|
|
AVFrame *AvcodecAllocFrame(void);
|
|
int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec);
|
|
@@ -117,15 +117,15 @@
|
|
DynaLink m_libAvcodec;
|
|
DynaLink m_libAvutil;
|
|
|
|
- CodecID m_codec;
|
|
+ AVCodecID m_codec;
|
|
char m_codecString[32];
|
|
|
|
void (*Favcodec_init)(void);
|
|
void (*Fav_init_packet)(AVPacket *pkt);
|
|
|
|
void (*Favcodec_register_all)(void);
|
|
- AVCodec *(*Favcodec_find_encoder)(enum CodecID id);
|
|
- AVCodec *(*Favcodec_find_decoder)(enum CodecID id);
|
|
+ AVCodec *(*Favcodec_find_encoder)(enum AVCodecID id);
|
|
+ AVCodec *(*Favcodec_find_decoder)(enum AVCodecID id);
|
|
AVCodecContext *(*Favcodec_alloc_context)(void);
|
|
AVFrame *(*Favcodec_alloc_frame)(void);
|
|
int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec);
|
|
diff -Naur opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h opal-3.10.10/plugins/video/common/ffmpeg/libavcodec/avcodec.h
|
|
--- opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-02-20 03:18:04.000000000 +0100
|
|
+++ plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-10-08 12:57:25.060873488 +0200
|
|
@@ -101,7 +101,7 @@
|
|
* 1. no value of a existing codec ID changes (that would break ABI),
|
|
* 2. it is as close as possible to similar codecs.
|
|
*/
|
|
-enum CodecID {
|
|
+enum AVCodecID {
|
|
CODEC_ID_NONE,
|
|
|
|
/* video codecs */
|
|
@@ -1390,7 +1390,7 @@
|
|
|
|
char codec_name[32];
|
|
enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
|
|
- enum CodecID codec_id; /* see CODEC_ID_xxx */
|
|
+ enum AVCodecID codec_id; /* see CODEC_ID_xxx */
|
|
|
|
/**
|
|
* fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
|
|
@@ -2843,7 +2843,7 @@
|
|
*/
|
|
const char *name;
|
|
enum AVMediaType type;
|
|
- enum CodecID id;
|
|
+ enum AVCodecID id;
|
|
int priv_data_size;
|
|
int (*init)(AVCodecContext *);
|
|
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
|
|
@@ -2898,7 +2898,7 @@
|
|
*
|
|
* See CODEC_ID_xxx
|
|
*/
|
|
- enum CodecID id;
|
|
+ enum AVCodecID id;
|
|
|
|
/**
|
|
* Supported pixel format.
|
|
@@ -3402,10 +3402,10 @@
|
|
/**
|
|
* Find a registered encoder with a matching codec ID.
|
|
*
|
|
- * @param id CodecID of the requested encoder
|
|
+ * @param id AVCodecID of the requested encoder
|
|
* @return An encoder if one was found, NULL otherwise.
|
|
*/
|
|
-AVCodec *avcodec_find_encoder(enum CodecID id);
|
|
+AVCodec *avcodec_find_encoder(enum AVCodecID id);
|
|
|
|
/**
|
|
* Find a registered encoder with the specified name.
|
|
@@ -3418,10 +3418,10 @@
|
|
/**
|
|
* Find a registered decoder with a matching codec ID.
|
|
*
|
|
- * @param id CodecID of the requested decoder
|
|
+ * @param id AVCodecID of the requested decoder
|
|
* @return A decoder if one was found, NULL otherwise.
|
|
*/
|
|
-AVCodec *avcodec_find_decoder(enum CodecID id);
|
|
+AVCodec *avcodec_find_decoder(enum AVCodecID id);
|
|
|
|
/**
|
|
* Find a registered decoder with the specified name.
|
|
@@ -3822,7 +3822,7 @@
|
|
* @param[in] codec_id the codec
|
|
* @return Number of bits per sample or zero if unknown for the given codec.
|
|
*/
|
|
-int av_get_bits_per_sample(enum CodecID codec_id);
|
|
+int av_get_bits_per_sample(enum AVCodecID codec_id);
|
|
|
|
#if FF_API_OLD_SAMPLE_FMT
|
|
/**
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx opal-3.10.10/plugins/video/H.263-1998/h263-1998.cxx
|
|
--- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx 2013-02-20 03:18:03.000000000 +0100
|
|
+++ plugins/video/H.263-1998/h263-1998.cxx 2013-10-08 12:57:25.061873475 +0200
|
|
@@ -48,6 +48,10 @@
|
|
#endif
|
|
|
|
#include "h263-1998.h"
|
|
+extern "C"
|
|
+{
|
|
+#include <libavutil/opt.h>
|
|
+}
|
|
#include <limits>
|
|
#include <iomanip>
|
|
#include <stdio.h>
|
|
@@ -203,7 +207,7 @@
|
|
PTRACE(4, m_prefix, "Encoder closed");
|
|
}
|
|
|
|
-bool H263_Base_EncoderContext::Init(CodecID codecId)
|
|
+bool H263_Base_EncoderContext::Init(AVCodecID codecId)
|
|
{
|
|
PTRACE(5, m_prefix, "Opening encoder");
|
|
|
|
@@ -317,9 +321,9 @@
|
|
// Level 2+
|
|
// works with eyeBeam, signaled via non-standard "D"
|
|
if (atoi(value) == 1)
|
|
- m_context->flags |= CODEC_FLAG_H263P_UMV;
|
|
+ av_opt_set_int(m_context->priv_data, "umv", 1, 0);
|
|
else
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_UMV;
|
|
+ av_opt_set_int(m_context->priv_data, "umv", 0, 0);
|
|
return;
|
|
}
|
|
|
|
@@ -328,9 +332,9 @@
|
|
// Annex F: Advanced Prediction Mode
|
|
// does not work with eyeBeam
|
|
if (atoi(value) == 1)
|
|
- m_context->flags |= CODEC_FLAG_OBMC;
|
|
+ av_opt_set_int(m_context->priv_data, "obmc", 1, 0);
|
|
else
|
|
- m_context->flags &= ~CODEC_FLAG_OBMC;
|
|
+ av_opt_set_int(m_context->priv_data, "obmc", 0, 0);
|
|
return;
|
|
}
|
|
#endif
|
|
@@ -360,9 +364,9 @@
|
|
// Annex K: Slice Structure
|
|
// does not work with eyeBeam
|
|
if (atoi(value) != 0)
|
|
- m_context->flags |= CODEC_FLAG_H263P_SLICE_STRUCT;
|
|
+ av_opt_set_int(m_context->priv_data, "structured_slices", 1, 0);
|
|
else
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT;
|
|
+ av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0);
|
|
return;
|
|
}
|
|
|
|
@@ -370,9 +374,9 @@
|
|
// Annex S: Alternative INTER VLC mode
|
|
// does not work with eyeBeam
|
|
if (atoi(value) == 1)
|
|
- m_context->flags |= CODEC_FLAG_H263P_AIV;
|
|
+ av_opt_set_int(m_context->priv_data, "aiv", 1, 0);
|
|
else
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_AIV;
|
|
+ av_opt_set_int(m_context->priv_data, "aiv", 0, 0);
|
|
return;
|
|
}
|
|
|
|
@@ -450,15 +454,6 @@
|
|
PTRACE(5, m_prefix, "qmax set to " << m_context->qmax);
|
|
PTRACE(5, m_prefix, "payload size set to " << m_context->rtp_payload_size);
|
|
|
|
- #define CODEC_TRACER_FLAG(tracer, flag) \
|
|
- PTRACE(4, m_prefix, #flag " is " << ((m_context->flags & flag) ? "enabled" : "disabled"));
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_UMV);
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_OBMC);
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_AC_PRED);
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_SLICE_STRUCT)
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_LOOP_FILTER);
|
|
- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_AIV);
|
|
-
|
|
return FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) == 0;
|
|
}
|
|
|
|
@@ -521,7 +516,7 @@
|
|
|
|
// Need to copy to local buffer to guarantee 16 byte alignment
|
|
memcpy(m_inputFrame->data[0], OPAL_VIDEO_FRAME_DATA_PTR(header), header->width*header->height*3/2);
|
|
- m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? FF_I_TYPE : AV_PICTURE_TYPE_NONE;
|
|
+ m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_NONE;
|
|
|
|
/*
|
|
m_inputFrame->pts = (int64_t)srcRTP.GetTimestamp()*m_context->time_base.den/m_context->time_base.num/VIDEO_CLOCKRATE;
|
|
@@ -603,13 +598,13 @@
|
|
m_context->rtp_callback = &H263_RFC2190_EncoderContext::RTPCallBack;
|
|
m_context->opaque = this; // used to separate out packets from different encode threads
|
|
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_UMV;
|
|
+ av_opt_set_int(m_context->priv_data, "umv", 0, 0);
|
|
m_context->flags &= ~CODEC_FLAG_4MV;
|
|
#if LIBAVCODEC_RTP_MODE
|
|
m_context->flags &= ~CODEC_FLAG_H263P_AIC;
|
|
#endif
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_AIV;
|
|
- m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT;
|
|
+ av_opt_set_int(m_context->priv_data, "aiv", 0, 0);
|
|
+ av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0);
|
|
|
|
return true;
|
|
}
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h opal-3.10.10/plugins/video/H.263-1998/h263-1998.h
|
|
--- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h 2013-02-20 03:18:03.000000000 +0100
|
|
+++ plugins/video/H.263-1998/h263-1998.h 2013-10-08 12:57:25.062873463 +0200
|
|
@@ -115,7 +115,7 @@
|
|
virtual ~H263_Base_EncoderContext();
|
|
|
|
virtual bool Init() = 0;
|
|
- virtual bool Init(CodecID codecId);
|
|
+ virtual bool Init(AVCodecID codecId);
|
|
|
|
virtual bool SetOptions(const char * const * options);
|
|
virtual void SetOption(const char * option, const char * value);
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in opal-3.10.10/plugins/video/H.263-1998/Makefile.in
|
|
--- opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in 2013-02-20 03:18:03.000000000 +0100
|
|
+++ plugins/video/H.263-1998/Makefile.in 2013-10-08 12:57:25.062873463 +0200
|
|
@@ -35,7 +35,7 @@
|
|
$(COMMONDIR)/dyna.cxx
|
|
|
|
CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR)
|
|
-LIBS += @DL_LIBS@
|
|
+LIBS += @DL_LIBS@ @LIBAVUTIL_LIBS@
|
|
|
|
HAVE_LIBAVCODEC_RTP_MODE=@HAVE_LIBAVCODEC_RTP_MODE@
|
|
ifeq ($(HAVE_LIBAVCODEC_RTP_MODE),yes)
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx opal-3.10.10/plugins/video/H.264/gpl/h264_helper.cxx
|
|
--- opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx 2013-02-20 03:18:02.000000000 +0100
|
|
+++ plugins/video/H.264/gpl/h264_helper.cxx 2013-10-08 12:57:25.062873463 +0200
|
|
@@ -27,6 +27,7 @@
|
|
#include <fstream>
|
|
#include <stdlib.h>
|
|
#include <sys/stat.h>
|
|
+#include <unistd.h>
|
|
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx opal-3.10.10/plugins/video/H.264/h264-x264.cxx
|
|
--- opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx 2013-02-20 03:18:02.000000000 +0100
|
|
+++ plugins/video/H.264/h264-x264.cxx 2013-10-08 12:57:25.063873450 +0200
|
|
@@ -40,6 +40,9 @@
|
|
#include "plugin-config.h"
|
|
#endif
|
|
|
|
+#define FF_IDCT_H264 11
|
|
+#define CODEC_FLAG2_SKIP_RD 0x00004000
|
|
+
|
|
#include <codec/opalplugin.hpp>
|
|
|
|
#include "../common/ffmpeg.h"
|
|
@@ -1071,13 +1074,10 @@
|
|
return false;
|
|
|
|
m_context->workaround_bugs = FF_BUG_AUTODETECT;
|
|
- m_context->error_recognition = FF_ER_AGGRESSIVE;
|
|
m_context->idct_algo = FF_IDCT_H264;
|
|
m_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
|
|
m_context->flags = CODEC_FLAG_INPUT_PRESERVED | CODEC_FLAG_EMU_EDGE;
|
|
- m_context->flags2 = CODEC_FLAG2_BRDO |
|
|
- CODEC_FLAG2_MEMC_ONLY |
|
|
- CODEC_FLAG2_DROP_FRAME_TIMECODE |
|
|
+ m_context->flags2 = CODEC_FLAG2_DROP_FRAME_TIMECODE |
|
|
CODEC_FLAG2_SKIP_RD |
|
|
CODEC_FLAG2_CHUNKS;
|
|
|
|
diff -Naur opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx opal-3.10.10/plugins/video/H.264/shared/x264wrap.cxx
|
|
--- opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx 2013-02-20 03:18:02.000000000 +0100
|
|
+++ plugins/video/H.264/shared/x264wrap.cxx 2013-10-08 12:57:25.064873438 +0200
|
|
@@ -33,6 +33,7 @@
|
|
|
|
#include <codec/opalplugin.hpp>
|
|
#include <stdio.h>
|
|
+#include <unistd.h>
|
|
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in opal-3.10.10/plugins/video/MPEG4-ffmpeg/Makefile.in
|
|
--- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in 2013-02-20 03:18:07.000000000 +0100
|
|
+++ plugins/video/MPEG4-ffmpeg/Makefile.in 2013-10-08 12:57:25.064873438 +0200
|
|
@@ -31,7 +31,7 @@
|
|
SRCS := mpeg4.cxx $(COMMONDIR)/dyna.cxx
|
|
|
|
CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR)
|
|
-LIBS += @DL_LIBS@
|
|
+LIBS += @DL_LIBS@ @LIBAVUTIL_LIBS@
|
|
|
|
# Add LIBAVCODEC_SOURCE_DIR to the include path so we can #include <libavcodec/...h>
|
|
# Also add libavutil, so ffmpeg headers can #include "log.h".
|
|
diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx opal-3.10.10/plugins/video/MPEG4-ffmpeg/mpeg4.cxx
|
|
--- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2013-02-20 03:18:07.000000000 +0100
|
|
+++ plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2013-10-08 12:57:25.065873425 +0200
|
|
@@ -103,6 +103,7 @@
|
|
|
|
#else /* LIBAVCODEC_HAVE_SOURCE_DIR */
|
|
#include "../common/ffmpeg.h"
|
|
+#include <libavutil/opt.h>
|
|
#endif /* LIBAVCODEC_HAVE_SOURCE_DIR */
|
|
}
|
|
|
|
@@ -589,17 +590,17 @@
|
|
m_avpicture->quality = m_videoQMin;
|
|
|
|
#ifdef USE_ORIG
|
|
- m_avcontext->flags |= CODEC_FLAG_PART; // data partitioning
|
|
+ av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0);
|
|
m_avcontext->flags |= CODEC_FLAG_4MV; // 4 motion vectors
|
|
#else
|
|
m_avcontext->max_b_frames=0; /*don't use b frames*/
|
|
m_avcontext->flags|=CODEC_FLAG_AC_PRED;
|
|
- m_avcontext->flags|=CODEC_FLAG_H263P_UMV;
|
|
+ av_opt_set_int(m_avcontext->priv_data, "umv", 1, 0);
|
|
/*c->flags|=CODEC_FLAG_QPEL;*/ /*don't enable this one: this forces profile_level to advanced simple profile */
|
|
m_avcontext->flags|=CODEC_FLAG_4MV;
|
|
m_avcontext->flags|=CODEC_FLAG_GMC;
|
|
m_avcontext->flags|=CODEC_FLAG_LOOP_FILTER;
|
|
- m_avcontext->flags|=CODEC_FLAG_H263P_SLICE_STRUCT;
|
|
+ av_opt_set_int(m_avcontext->priv_data, "structured_slices", 1, 0);
|
|
#endif
|
|
m_avcontext->opaque = this; // for use in RTP callback
|
|
}
|
|
@@ -804,7 +805,7 @@
|
|
// Should the next frame be an I-Frame?
|
|
if ((flags & PluginCodec_CoderForceIFrame) || (m_frameNum == 0))
|
|
{
|
|
- m_avpicture->pict_type = FF_I_TYPE;
|
|
+ m_avpicture->pict_type = AV_PICTURE_TYPE_I;
|
|
}
|
|
else // No IFrame requested, let avcodec decide what to do
|
|
{
|
|
@@ -1325,7 +1326,7 @@
|
|
|
|
void MPEG4DecoderContext::SetStaticDecodingParams() {
|
|
m_avcontext->flags |= CODEC_FLAG_4MV;
|
|
- m_avcontext->flags |= CODEC_FLAG_PART;
|
|
+ av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0);
|
|
m_avcontext->workaround_bugs = 0; // no workaround for buggy implementations
|
|
}
|
|
|