multimedia/cinelerra: Updated for version cv_2.3.

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Danny Schmarsel 2015-10-23 11:50:19 +07:00 committed by Willy Sudiarto Raharjo
parent a9902270f2
commit 9c6ab49f59
12 changed files with 322 additions and 668 deletions

View File

@ -1,8 +1,3 @@
Cinelerra is the most advanced non-linear video editor and compositor
for Linux. It does primarily 3 main things: capturing, compositing,
Cinelerra CV is the most advanced non-linear video editor and compositor
for Linux. It does primarily 3 main things: capturing, compositing,
and editing audio and video with sample level accuracy.
This is a development version maintained by official git cinelerra-cv:
http://git.cinelerra.org/gitweb?p=j6t/cinelerra.git;a=summary
This build script uses a git snapshot that was downloaded and hosted
by the script maintainer.

View File

@ -2,7 +2,7 @@
# Slackware build script for cinelerra
# Copyright 2011 by Giovanne Castro, Campinas, Sao Paulo, Brazil <giovannefc@ig.com.br>
# Copyright 2015 by Danny Schmarsel <danny@schmarsel.de>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@ -23,8 +23,8 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=cinelerra
VERSION=${VERSION:-cv_2.2}
BUILD=${BUILD:-2}
VERSION=${VERSION:-cv_2.3}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@ -65,19 +65,19 @@ set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM
tar xvf $CWD/$PRGNAM-$VERSION.tar.?z*
cd $PRGNAM
rm -rf CinelerraCV-2.3
tar xvf $CWD/CinelerraCV-2.3.tar.xz
cd CinelerraCV-2.3
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
# Patches (from gentoo repository)
# http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/media-video/cinelerra/files/
for i in $CWD/patches/* ; do patch -p1 < $i ; done
# Patches (from the official website) for compatibility with ffmpeg-2.x
patch -p1 < $CWD/patches/cinelerra-cv-ffmpeg_api2.2.patch
patch -p1 < $CWD/patches/cinelerra-cv-ffmpeg2.0.patch
./autogen.sh
@ -106,8 +106,7 @@ find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS README* TODO \
cp -a AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS README* TODO \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

View File

@ -1,10 +1,10 @@
PRGNAM="cinelerra"
VERSION="cv_2.2"
HOMEPAGE="http://cinelerra.org/"
DOWNLOAD="http://ponce.cc/slackware/sources/repo/cinelerra-cv_2.2.tar.xz"
MD5SUM="b13dafcdcbf75264ff136f5a17d1ac82"
VERSION="cv_2.3"
HOMEPAGE="http://cinelerra-cv.org/"
DOWNLOAD="http://www.cinelerra-cv.org/releases/CinelerraCV-2.3.tar.xz"
MD5SUM="a1e7bfaf9827f74900d58d25955bdf3f"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="a52dec faac faad2 ffmpeg imlib2 libavc1394 libdv libiec61883 mjpegtools lame x264"
MAINTAINER="Giovanne Castro"
EMAIL="giovannefc@ig.com.br"
MAINTAINER="Danny Schmarsel"
EMAIL="danny@schmarsel.de"

View File

@ -1,14 +0,0 @@
--- a/image/cinelerra.desktop
+++ b/image/cinelerra.desktop
@@ -5,9 +5,8 @@
Name[fr]=Cinelerra
Name[es]=Cinelerra
Comment=Video Editor
-Categories=Application;AudioVideo;Multimedia;
-Encoding=UTF-8
+Categories=AudioVideo;
Exec=cinelerra
-Icon=cinelerra.xpm
+Icon=cinelerra
Terminal=false
Type=Application

View File

@ -1,76 +0,0 @@
Fix build with ffmpeg/libav trunk / 0.7
Index: cinelerra-20101104/cinelerra/ffmpeg.C
===================================================================
--- cinelerra-20101104.orig/cinelerra/ffmpeg.C
+++ cinelerra-20101104/cinelerra/ffmpeg.C
@@ -364,12 +364,15 @@ int FFMPEG::decode(uint8_t *data, long d
// NOTE: frame must already have data space allocated
+ AVPacket pkt;
got_picture = 0;
- int length = avcodec_decode_video(context,
+ av_init_packet( &pkt );
+ pkt.data = data;
+ pkt.size = data_size;
+ int length = avcodec_decode_video2(context,
picture,
&got_picture,
- data,
- data_size);
+ &pkt);
if (length < 0) {
printf("FFMPEG::decode error decoding frame\n");
Index: cinelerra-20101104/quicktime/qtffmpeg.c
===================================================================
--- cinelerra-20101104.orig/quicktime/qtffmpeg.c
+++ cinelerra-20101104/quicktime/qtffmpeg.c
@@ -181,6 +181,7 @@ static int decode_wrapper(quicktime_t *f
if(!result)
{
+ AVPacket pkt;
// No way to determine if there was an error based on nonzero status.
@@ -189,11 +190,13 @@ static int decode_wrapper(quicktime_t *f
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_NONREF /* AVDISCARD_BIDIR */;
else
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_DEFAULT;
- result = avcodec_decode_video(ffmpeg->decoder_context[current_field],
+ av_init_packet( &pkt );
+ pkt.data = ffmpeg->work_buffer;
+ pkt.size = bytes + header_bytes;
+ result = avcodec_decode_video2(ffmpeg->decoder_context[current_field],
&ffmpeg->picture[current_field],
&got_picture,
- ffmpeg->work_buffer,
- bytes + header_bytes);
+ &pkt);
Index: cinelerra-20101104/quicktime/wma.c
===================================================================
--- cinelerra-20101104.orig/quicktime/wma.c
+++ cinelerra-20101104/quicktime/wma.c
@@ -195,11 +195,14 @@ printf("decode 2 %x %llx %llx\n", chunk_
chunk_size);
#else
bytes_decoded = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- result = avcodec_decode_audio2(codec->decoder_context,
+ AVPacket pkt;
+ av_init_packet( &pkt );
+ pkt.data = codec->packet_buffer;
+ pkt.size = chunk_size;
+ result = avcodec_decode_audio3(codec->decoder_context,
(int16_t*)(codec->work_buffer + codec->output_size * sample_size),
&bytes_decoded,
- codec->packet_buffer,
- chunk_size);
+ &pkt);
#endif
pthread_mutex_unlock(&ffmpeg_lock);

View File

@ -1,156 +0,0 @@
Let it build with ffmpeg-0.11
Index: cinelerra-20111223/cinelerra/ffmpeg.C
===================================================================
--- cinelerra-20111223.orig/cinelerra/ffmpeg.C
+++ cinelerra-20111223/cinelerra/ffmpeg.C
@@ -23,7 +23,6 @@ FFMPEG::FFMPEG(Asset *asset) {
int FFMPEG::init(char *codec_string) {
- avcodec_init();
avcodec_register_all();
CodecID id = codec_id(codec_string);
Index: cinelerra-20111223/cinelerra/fileac3.C
===================================================================
--- cinelerra-20111223.orig/cinelerra/fileac3.C
+++ cinelerra-20111223/cinelerra/fileac3.C
@@ -84,7 +84,6 @@ int FileAC3::open_file(int rd, int wr)
if(wr)
{
- avcodec_init();
avcodec_register_all();
codec = avcodec_find_encoder(CODEC_ID_AC3);
if(!codec)
Index: cinelerra-20111223/configure.in
===================================================================
--- cinelerra-20111223.orig/configure.in
+++ cinelerra-20111223/configure.in
@@ -338,7 +338,7 @@ AC_SUBST(CPU_CFLAGS)
AC_ARG_WITH([external-ffmpeg], AC_HELP_STRING([--with-external-ffmpeg], [use external ffmpeg library]))
if test "x$with_external_ffmpeg" = "xyes"; then
- PKG_CHECK_MODULES([FFMPEG_TEMP], [libavcodec libpostproc])
+ PKG_CHECK_MODULES([FFMPEG_TEMP], [libavcodec libpostproc libavutil])
FFMPEG_FOLDER=""
FFMPEG_EXTERNALTEXT="External ffmpeg"
@@ -356,10 +356,10 @@ if test "x$with_external_ffmpeg" = "xyes
AC_MSG_RESULT($enable_ffmpeg_swscale)
if test x"$enable_ffmpeg_swscale" = xyes; then
dnl AC_DEFINE(HAVE_SWSCALER)
- PKG_CHECK_MODULES([FFMPEG], [libavcodec libpostproc libswscale])
+ PKG_CHECK_MODULES([FFMPEG], [libavcodec libpostproc libswscale libavutil])
FFMPEG_CFLAGS="$FFMPEG_CFLAGS -I/usr/include/libavcodec -I/usr/include/libswscale -DHAVE_SWSCALER"
else
- PKG_CHECK_MODULES([FFMPEG], [libavcodec libpostproc])
+ PKG_CHECK_MODULES([FFMPEG], [libavcodec libpostproc libavutil])
fi
FFMPEG_EXTERNALTEXT="External ffmpeg"
else
Index: cinelerra-20111223/quicktime/mpeg4.c
===================================================================
--- cinelerra-20111223.orig/quicktime/mpeg4.c
+++ cinelerra-20111223/quicktime/mpeg4.c
@@ -8,6 +8,7 @@
#include "libavcodec/avcodec.h"
+#include "libavutil/dict.h"
#include "colormodels.h"
#include "funcprotos.h"
#include "qtffmpeg.h"
@@ -624,12 +625,12 @@ static int encode(quicktime_t *file, uns
else
// ffmpeg section
{
+ AVDictionary ** opts = NULL;
static char *video_rc_eq="tex^qComp";
codec->encode_initialized[current_field] = 1;
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}
@@ -673,8 +674,10 @@ static int encode(quicktime_t *file, uns
context->b_quant_offset = 1.25;
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
context->error_resilience = FF_ER_CAREFUL;
-#else
+#elif LIBAVCODEC_VERSION_INT < ((54<<16)+(0<<8)+0)
context->error_recognition = FF_ER_CAREFUL;
+#else
+ context->err_recognition |= AV_EF_CAREFUL;
#endif
context->error_concealment = 3;
context->frame_skip_cmp = FF_CMP_DCTMAX;
@@ -699,7 +702,7 @@ static int encode(quicktime_t *file, uns
context->profile= FF_PROFILE_UNKNOWN;
context->rc_buffer_aggressivity = 1.0;
context->level= FF_LEVEL_UNKNOWN;
- context->flags |= CODEC_FLAG_H263P_UMV;
+ av_dict_set(opts, "umv", "1", 0);
context->flags |= CODEC_FLAG_AC_PRED;
// All the forbidden settings can be extracted from libavcodec/mpegvideo.c of ffmpeg...
@@ -717,10 +720,8 @@ static int encode(quicktime_t *file, uns
(codec->ffmpeg_id == CODEC_ID_MPEG4 ||
codec->ffmpeg_id == CODEC_ID_MPEG1VIDEO ||
codec->ffmpeg_id == CODEC_ID_MPEG2VIDEO ||
- codec->ffmpeg_id == CODEC_ID_H263P ||
- codec->ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT))
+ codec->ffmpeg_id == CODEC_ID_H263P ))
{
- avcodec_thread_init(context, file->cpus);
context->thread_count = file->cpus;
}
@@ -740,7 +741,7 @@ static int encode(quicktime_t *file, uns
* codec->fix_bitrate,
* codec->quantizer);
*/
- avcodec_open(context, codec->encoder[current_field]);
+ avcodec_open2(context, codec->encoder[current_field], opts);
avcodec_get_frame_defaults(&codec->picture[current_field]);
Index: cinelerra-20111223/quicktime/qtffmpeg.c
===================================================================
--- cinelerra-20111223.orig/quicktime/qtffmpeg.c
+++ cinelerra-20111223/quicktime/qtffmpeg.c
@@ -54,7 +54,6 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}
@@ -90,10 +89,8 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg
(ffmpeg_id == CODEC_ID_MPEG4 ||
ffmpeg_id == CODEC_ID_MPEG1VIDEO ||
ffmpeg_id == CODEC_ID_MPEG2VIDEO ||
- ffmpeg_id == CODEC_ID_H263P ||
- ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT))
+ ffmpeg_id == CODEC_ID_H263P ))
{
- avcodec_thread_init(context, cpus);
context->thread_count = cpus;
}
if(avcodec_open(context,
Index: cinelerra-20111223/quicktime/wma.c
===================================================================
--- cinelerra-20111223.orig/quicktime/wma.c
+++ cinelerra-20111223/quicktime/wma.c
@@ -67,7 +67,6 @@ static int init_decode(quicktime_audio_m
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}

View File

@ -1,81 +0,0 @@
Include required headers for free(), memcpy(), strcpy(), bcopy(), and more
Thanks to Martin von Gagern for reporting and initial patch
See, http://bugs.gentoo.org/show_bug.cgi?id=465478
--- a/cinelerra/vdevicebuz.C
+++ b/cinelerra/vdevicebuz.C
@@ -49,6 +49,8 @@
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <unistd.h>
+#include <string.h>
+#include <strings.h>
#define BASE_VIDIOCPRIVATE 192
--- a/cinelerra/videodevice.C
+++ b/cinelerra/videodevice.C
@@ -53,6 +53,7 @@
#include <unistd.h>
#include <fcntl.h>
+#include <string.h>
KeepaliveThread::KeepaliveThread(VideoDevice *device)
: Thread()
--- a/libmpeg3/audio/ac3.c
+++ b/libmpeg3/audio/ac3.c
@@ -1,3 +1,4 @@
+#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
--- a/libmpeg3/audio/layer3.c
+++ b/libmpeg3/audio/layer3.c
@@ -4,6 +4,7 @@
#include "tables.h"
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
struct gr_info_s
--- a/mplexlo/mplex.c
+++ b/mplexlo/mplex.c
@@ -1,6 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
-
+#include <string.h>
#include "libmpeg3.h"
#include "mpeg3protos.h"
--- a/quicktime/graphics.c
+++ b/quicktime/graphics.c
@@ -1,5 +1,6 @@
#include "graphics.h"
+#include <stdlib.h>
#include <string.h>
/* Graphics acceleration routines */
--- a/quicktime/libmjpeg.c
+++ b/quicktime/libmjpeg.c
@@ -17,6 +17,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "colormodels.h"
#include "libmjpeg.h"
--- a/quicktime/qtpng.c
+++ b/quicktime/qtpng.c
@@ -1,6 +1,7 @@
#include "colormodels.h"
#include "funcprotos.h"
#include <png.h>
+#include <string.h>
#include "quicktime.h"
#include "qtpng.h"

View File

@ -1,93 +0,0 @@
diff -urN cinelerra-20120707/cinelerra/ffmpeg.C /tmp/cinelerra-20120707/cinelerra/ffmpeg.C
--- cinelerra-20120707/cinelerra/ffmpeg.C 2013-06-22 18:07:43.632978553 +0200
+++ /tmp/cinelerra-20120707/cinelerra/ffmpeg.C 2013-06-22 18:07:21.668979334 +0200
@@ -32,9 +32,9 @@
return 1;
}
- context = avcodec_alloc_context();
+ context = avcodec_alloc_context3(NULL);
- if (avcodec_open(context, codec)) {
+ if (avcodec_open2(context, codec, NULL)) {
printf("FFMPEG::init avcodec_open() failed\n");
}
diff -urN cinelerra-20120707/cinelerra/fileac3.C /tmp/cinelerra-20120707/cinelerra/fileac3.C
--- cinelerra-20120707/cinelerra/fileac3.C 2013-06-22 18:07:43.632978553 +0200
+++ /tmp/cinelerra-20120707/cinelerra/fileac3.C 2013-06-22 18:07:21.668979334 +0200
@@ -91,11 +91,11 @@
eprintf("codec not found.\n");
return 1;
}
- codec_context = avcodec_alloc_context();
+ codec_context = avcodec_alloc_context3(NULL);
codec_context->bit_rate = asset->ac3_bitrate * 1000;
codec_context->sample_rate = asset->sample_rate;
codec_context->channels = asset->channels;
- if(avcodec_open(codec_context, codec))
+ if(avcodec_open2(codec_context, codec, NULL))
{
eprintf("failed to open codec.\n");
return 1;
diff -urN cinelerra-20120707/quicktime/mpeg4.c /tmp/cinelerra-20120707/quicktime/mpeg4.c
--- cinelerra-20120707/quicktime/mpeg4.c 2013-06-22 18:07:43.633978553 +0200
+++ /tmp/cinelerra-20120707/quicktime/mpeg4.c 2013-06-22 18:07:21.690979334 +0200
@@ -642,7 +642,7 @@
return 1;
}
- codec->encoder_context[current_field] = avcodec_alloc_context();
+ codec->encoder_context[current_field] = avcodec_alloc_context3(NULL);
AVCodecContext *context = codec->encoder_context[current_field];
context->width = width_i;
@@ -676,8 +676,6 @@
context->error_resilience = FF_ER_CAREFUL;
#elif LIBAVCODEC_VERSION_INT < ((54<<16)+(0<<8)+0)
context->error_recognition = FF_ER_CAREFUL;
-#else
- context->err_recognition |= AV_EF_CAREFUL;
#endif
context->error_concealment = 3;
context->frame_skip_cmp = FF_CMP_DCTMAX;
diff -urN cinelerra-20120707/quicktime/qtffmpeg.c /tmp/cinelerra-20120707/quicktime/qtffmpeg.c
--- cinelerra-20120707/quicktime/qtffmpeg.c 2013-06-22 18:07:43.633978553 +0200
+++ /tmp/cinelerra-20120707/quicktime/qtffmpeg.c 2013-06-22 18:07:21.690979334 +0200
@@ -67,7 +67,7 @@
return 0;
}
- AVCodecContext *context = ptr->decoder_context[i] = avcodec_alloc_context();
+ AVCodecContext *context = ptr->decoder_context[i] = avcodec_alloc_context3(NULL);
static char fake_data[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
context->width = ptr->width_i;
context->height = ptr->height_i;
@@ -93,8 +93,8 @@
{
context->thread_count = cpus;
}
- if(avcodec_open(context,
- ptr->decoder[i]) < 0)
+ if(avcodec_open2(context,
+ ptr->decoder[i], NULL) < 0)
{
printf("quicktime_new_ffmpeg: avcodec_open failed.\n");
quicktime_delete_ffmpeg(ptr);
diff -urN cinelerra-20120707/quicktime/wma.c /tmp/cinelerra-20120707/quicktime/wma.c
--- cinelerra-20120707/quicktime/wma.c 2013-06-22 18:07:43.634978553 +0200
+++ /tmp/cinelerra-20120707/quicktime/wma.c 2013-06-22 18:07:21.690979334 +0200
@@ -76,10 +76,10 @@
printf("init_decode: avcodec_find_decoder returned NULL.\n");
return 1;
}
- codec->decoder_context = avcodec_alloc_context();
+ codec->decoder_context = avcodec_alloc_context3(NULL);
codec->decoder_context->sample_rate = trak->mdia.minf.stbl.stsd.table[0].sample_rate;
codec->decoder_context->channels = track_map->channels;
- if(avcodec_open(codec->decoder_context, codec->decoder) < 0)
+ if(avcodec_open2(codec->decoder_context, codec->decoder, NULL) < 0)
{
printf("init_decode: avcodec_open failed.\n");
return 1;

View File

@ -1,218 +0,0 @@
https://bugs.gentoo.org/show_bug.cgi?id=479394
By Helmut Jarausch
--- a/cinelerra/ffmpeg.h.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/cinelerra/ffmpeg.h 2013-08-01 12:58:12.342474136 +0200
@@ -26,7 +26,7 @@
static int convert_cmodel_transfer(VFrame *frame_in,VFrame *frame_out);
static int init_picture_from_frame(AVPicture *picture, VFrame *frame);
- static CodecID codec_id(char *codec_string);
+ static AVCodecID codec_id(char *codec_string);
private:
static PixelFormat color_model_to_pix_fmt(int color_model);
--- a/cinelerra/ffmpeg.C.ORIG 2013-08-01 11:24:43.794419246 +0200
+++ a/cinelerra/ffmpeg.C 2013-08-01 12:57:48.121473899 +0200
@@ -25,7 +25,7 @@
avcodec_register_all();
- CodecID id = codec_id(codec_string);
+ AVCodecID id = codec_id(codec_string);
codec = avcodec_find_decoder(id);
if (codec == NULL) {
printf("FFMPEG::init no decoder for '%s'", codec_string);
@@ -51,7 +51,7 @@
}
-CodecID FFMPEG::codec_id(char *codec_string) {
+AVCodecID FFMPEG::codec_id(char *codec_string) {
#define CODEC_IS(x) (! strncmp(codec_string, x, 4))
if (CODEC_IS(QUICKTIME_DV) ||
--- a/quicktime/ffmpeg/ffmpeg.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/ffmpeg.c 2013-08-01 12:57:59.025474005 +0200
@@ -2663,7 +2663,7 @@
return 0;
}
-static enum CodecID find_codec_or_die(const char *name, int type, int encoder)
+static enum AVCodecID find_codec_or_die(const char *name, int type, int encoder)
{
const char *codec_string = encoder ? "encoder" : "decoder";
AVCodec *codec;
--- a/quicktime/ffmpeg/libavformat/electronicarts.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/electronicarts.c 2013-08-01 13:00:57.855475755 +0200
@@ -49,11 +49,11 @@
typedef struct EaDemuxContext {
int big_endian;
- enum CodecID video_codec;
+ enum AVCodecID video_codec;
AVRational time_base;
int video_stream_index;
- enum CodecID audio_codec;
+ enum AVCodecID audio_codec;
int audio_stream_index;
int audio_frame_counter;
--- a/quicktime/ffmpeg/libavformat/img2.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/img2.c 2013-08-01 12:59:21.408474812 +0200
@@ -34,7 +34,7 @@
} VideoData;
typedef struct {
- enum CodecID id;
+ enum AVCodecID id;
const char *str;
} IdStrMap;
@@ -97,7 +97,7 @@
}
return -1;
}
-static enum CodecID av_str2id(const IdStrMap *tags, const char *str)
+static enum AVCodecID av_str2id(const IdStrMap *tags, const char *str)
{
str= strrchr(str, '.');
if(!str) return CODEC_ID_NONE;
@@ -175,7 +175,7 @@
return 0;
}
-enum CodecID av_guess_image2_codec(const char *filename){
+enum AVCodecID av_guess_image2_codec(const char *filename){
return av_str2id(img_tags, filename);
}
--- a/quicktime/ffmpeg/libavformat/matroskadec.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/matroskadec.c 2013-08-01 12:59:57.556475165 +0200
@@ -2476,7 +2476,7 @@
AVStream *st;
for (i = 0; i < matroska->num_tracks; i++) {
- enum CodecID codec_id = CODEC_ID_NONE;
+ enum AVCodecID codec_id = CODEC_ID_NONE;
uint8_t *extradata = NULL;
int extradata_size = 0;
int extradata_offset = 0;
@@ -2495,7 +2495,7 @@
}
}
- /* Set the FourCC from the CodecID. */
+ /* Set the FourCC from the AVCodecID. */
/* This is the MS compatibility mode which stores a
* BITMAPINFOHEADER in the CodecPrivate. */
if (!strcmp(track->codec_id,
@@ -2600,7 +2600,7 @@
if (codec_id == CODEC_ID_NONE) {
av_log(matroska->ctx, AV_LOG_INFO,
- "Unknown/unsupported CodecID %s.\n",
+ "Unknown/unsupported AVCodecID %s.\n",
track->codec_id);
}
--- a/quicktime/ffmpeg/libavformat/matroska.h.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/matroska.h 2013-08-01 13:00:22.218475407 +0200
@@ -220,12 +220,12 @@
typedef struct CodecTags{
char str[16];
- enum CodecID id;
+ enum AVCodecID id;
}CodecTags;
typedef struct CodecMime{
char str[32];
- enum CodecID id;
+ enum AVCodecID id;
}CodecMime;
#define MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC "V_MS/VFW/FOURCC"
--- a/quicktime/ffmpeg/libavformat/mov.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/mov.c 2013-08-01 12:59:33.935474934 +0200
@@ -678,7 +678,7 @@
for(pseudo_stream_id=0; pseudo_stream_id<entries; pseudo_stream_id++) {
//Parsing Sample description table
- enum CodecID id;
+ enum AVCodecID id;
int dref_id;
MOV_atom_t a = { 0, 0, 0 };
offset_t start_pos = url_ftell(pb);
--- a/quicktime/ffmpeg/libavformat/mxf.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/mxf.c 2013-08-01 12:59:12.025474720 +0200
@@ -157,7 +157,7 @@
typedef struct {
UID uid;
unsigned matching_len;
- enum CodecID id;
+ enum AVCodecID id;
} MXFCodecUL;
typedef struct {
--- a/quicktime/ffmpeg/libavformat/riff.h.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/riff.h 2013-08-01 12:59:45.950475052 +0200
@@ -48,7 +48,7 @@
extern const AVCodecTag codec_wav_tags[];
unsigned int codec_get_tag(const AVCodecTag *tags, int id);
-enum CodecID codec_get_id(const AVCodecTag *tags, unsigned int tag);
+enum AVCodecID codec_get_id(const AVCodecTag *tags, unsigned int tag);
void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale);
#endif /* FFMPEG_RIFF_H */
--- a/quicktime/ffmpeg/libavformat/rtp.c.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/rtp.c 2013-08-01 12:59:01.778474619 +0200
@@ -40,7 +40,7 @@
int pt;
const char enc_name[6];
enum CodecType codec_type;
- enum CodecID codec_id;
+ enum AVCodecID codec_id;
int clock_rate;
int audio_channels;
} AVRtpPayloadTypes[]=
@@ -120,7 +120,7 @@
return "";
}
-enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type)
+enum AVCodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type)
{
int i;
--- a/quicktime/ffmpeg/libavformat/rtp_internal.h.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/ffmpeg/libavformat/rtp_internal.h 2013-08-01 13:00:09.147475279 +0200
@@ -61,7 +61,7 @@
// fields from AVRtpDynamicPayloadType_s
const char enc_name[50]; /* XXX: still why 50 ? ;-) */
enum CodecType codec_type;
- enum CodecID codec_id;
+ enum AVCodecID codec_id;
// may be null
int (*parse_sdp_a_line) (AVStream * stream,
@@ -123,7 +123,7 @@
void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
const char *ff_rtp_enc_name(int payload_type);
-enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
+enum AVCodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
void av_register_rtp_dynamic_payload_handlers(void);
--- a/quicktime/wma.h.ORIG 2012-07-06 22:40:26.000000000 +0200
+++ a/quicktime/wma.h 2013-08-01 13:11:46.431482103 +0200
@@ -3,5 +3,6 @@
extern void quicktime_init_codec_wmav1(quicktime_audio_map_t *);
extern void quicktime_init_codec_wmav2(quicktime_audio_map_t *);
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
#endif

View File

@ -0,0 +1,98 @@
diff --git a/cinelerra/ffmpeg.C b/cinelerra/ffmpeg.C
index b762d46..53ad7a1 100644
--- a/cinelerra/ffmpeg.C
+++ b/cinelerra/ffmpeg.C
@@ -32,9 +32,9 @@ int FFMPEG::init(char *codec_string) {
return 1;
}
- context = avcodec_alloc_context();
+ context = avcodec_alloc_context3(codec);
- if (avcodec_open(context, codec)) {
+ if (avcodec_open2(context, codec,NULL)) {
printf("FFMPEG::init avcodec_open() failed\n");
}
diff --git a/cinelerra/fileac3.C b/cinelerra/fileac3.C
index e56705f..119c2d5 100644
--- a/cinelerra/fileac3.C
+++ b/cinelerra/fileac3.C
@@ -91,11 +91,11 @@ int FileAC3::open_file(int rd, int wr)
eprintf("codec not found.\n");
return 1;
}
- codec_context = avcodec_alloc_context();
+ codec_context = avcodec_alloc_context3(codec);
codec_context->bit_rate = asset->ac3_bitrate * 1000;
codec_context->sample_rate = asset->sample_rate;
codec_context->channels = asset->channels;
- if(avcodec_open(codec_context, codec))
+ if(avcodec_open2(codec_context, codec,NULL))
{
eprintf("failed to open codec.\n");
return 1;
diff --git a/quicktime/mpeg4.c b/quicktime/mpeg4.c
index 67bcab8..d78055e 100644
--- a/quicktime/mpeg4.c
+++ b/quicktime/mpeg4.c
@@ -640,7 +640,7 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
return 1;
}
- codec->encoder_context[current_field] = avcodec_alloc_context();
+ codec->encoder_context[current_field] = avcodec_alloc_context3(codec->encoder[current_field]);
AVCodecContext *context = codec->encoder_context[current_field];
context->width = width_i;
@@ -736,7 +736,7 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
* codec->fix_bitrate,
* codec->quantizer);
*/
- avcodec_open(context, codec->encoder[current_field]);
+ avcodec_open2(context, codec->encoder[current_field],NULL);
avcodec_get_frame_defaults(&codec->picture[current_field]);
diff --git a/quicktime/qtffmpeg.c b/quicktime/qtffmpeg.c
index c808da7..522d23c 100644
--- a/quicktime/qtffmpeg.c
+++ b/quicktime/qtffmpeg.c
@@ -67,7 +67,9 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus,
return 0;
}
- AVCodecContext *context = ptr->decoder_context[i] = avcodec_alloc_context();
+ //AVCodecContext *context = ptr->decoder_context[i] = avcodec_alloc_context();
+ AVCodecContext *context = avcodec_alloc_context3(ptr->decoder[i]);
+ ptr->decoder_context[i] = context;
static char fake_data[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
context->width = ptr->width_i;
context->height = ptr->height_i;
@@ -93,8 +95,7 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus,
{
context->thread_count = cpus;
}
- if(avcodec_open(context,
- ptr->decoder[i]) < 0)
+ if(avcodec_open2(context, ptr->decoder[i], NULL) < 0)
{
printf("quicktime_new_ffmpeg: avcodec_open failed.\n");
quicktime_delete_ffmpeg(ptr);
diff --git a/quicktime/wma.c b/quicktime/wma.c
index f38bdce..4be0274 100644
--- a/quicktime/wma.c
+++ b/quicktime/wma.c
@@ -76,10 +76,10 @@ static int init_decode(quicktime_audio_map_t *track_map,
printf("init_decode: avcodec_find_decoder returned NULL.\n");
return 1;
}
- codec->decoder_context = avcodec_alloc_context();
+ codec->decoder_context = avcodec_alloc_context3(codec->decoder);
codec->decoder_context->sample_rate = trak->mdia.minf.stbl.stsd.table[0].sample_rate;
codec->decoder_context->channels = track_map->channels;
- if(avcodec_open(codec->decoder_context, codec->decoder) < 0)
+ if(avcodec_open2(codec->decoder_context, codec->decoder,NULL) < 0)
{
printf("init_decode: avcodec_open failed.\n");
return 1;

View File

@ -0,0 +1,200 @@
diff --git a/cinelerra/ffmpeg.C b/cinelerra/ffmpeg.C
index 6ab6047..b762d46 100644
--- a/cinelerra/ffmpeg.C
+++ b/cinelerra/ffmpeg.C
@@ -2,7 +2,7 @@
#ifdef HAVE_SWSCALER
extern "C" {
-#include <swscale.h>
+#include <libswscale/swscale.h>
}
#endif
@@ -23,10 +23,9 @@ FFMPEG::FFMPEG(Asset *asset) {
int FFMPEG::init(char *codec_string) {
- avcodec_init();
avcodec_register_all();
- CodecID id = codec_id(codec_string);
+ AVCodecID id = codec_id(codec_string);
codec = avcodec_find_decoder(id);
if (codec == NULL) {
printf("FFMPEG::init no decoder for '%s'", codec_string);
@@ -52,7 +51,7 @@ FFMPEG::~FFMPEG() {
}
-CodecID FFMPEG::codec_id(char *codec_string) {
+AVCodecID FFMPEG::codec_id(char *codec_string) {
#define CODEC_IS(x) (! strncmp(codec_string, x, 4))
if (CODEC_IS(QUICKTIME_DV) ||
@@ -364,12 +363,15 @@ int FFMPEG::decode(uint8_t *data, long data_size, VFrame *frame_out) {
// NOTE: frame must already have data space allocated
+ AVPacket pkt;
got_picture = 0;
- int length = avcodec_decode_video(context,
+ av_init_packet( &pkt );
+ pkt.data = data;
+ pkt.size = data_size;
+ int length = avcodec_decode_video2(context,
picture,
&got_picture,
- data,
- data_size);
+ &pkt);
if (length < 0) {
printf("FFMPEG::decode error decoding frame\n");
diff --git a/cinelerra/ffmpeg.h b/cinelerra/ffmpeg.h
index 69c9956..dc7174e 100644
--- a/cinelerra/ffmpeg.h
+++ b/cinelerra/ffmpeg.h
@@ -26,7 +26,7 @@ class FFMPEG
static int convert_cmodel_transfer(VFrame *frame_in,VFrame *frame_out);
static int init_picture_from_frame(AVPicture *picture, VFrame *frame);
- static CodecID codec_id(char *codec_string);
+ static AVCodecID codec_id(char *codec_string);
private:
static PixelFormat color_model_to_pix_fmt(int color_model);
diff --git a/cinelerra/fileac3.C b/cinelerra/fileac3.C
index a1ef61e..e56705f 100644
--- a/cinelerra/fileac3.C
+++ b/cinelerra/fileac3.C
@@ -84,7 +84,6 @@ int FileAC3::open_file(int rd, int wr)
if(wr)
{
- avcodec_init();
avcodec_register_all();
codec = avcodec_find_encoder(CODEC_ID_AC3);
if(!codec)
diff --git a/quicktime/mpeg4.c b/quicktime/mpeg4.c
index 81cb72b..67bcab8 100644
--- a/quicktime/mpeg4.c
+++ b/quicktime/mpeg4.c
@@ -629,7 +629,6 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}
@@ -674,7 +673,7 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
context->error_resilience = FF_ER_CAREFUL;
#else
- context->error_recognition = FF_ER_CAREFUL;
+ context->err_recognition = AV_EF_CRCCHECK;
#endif
context->error_concealment = 3;
context->frame_skip_cmp = FF_CMP_DCTMAX;
@@ -699,7 +698,6 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
context->profile= FF_PROFILE_UNKNOWN;
context->rc_buffer_aggressivity = 1.0;
context->level= FF_LEVEL_UNKNOWN;
- context->flags |= CODEC_FLAG_H263P_UMV;
context->flags |= CODEC_FLAG_AC_PRED;
// All the forbidden settings can be extracted from libavcodec/mpegvideo.c of ffmpeg...
@@ -717,10 +715,8 @@ static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
(codec->ffmpeg_id == CODEC_ID_MPEG4 ||
codec->ffmpeg_id == CODEC_ID_MPEG1VIDEO ||
codec->ffmpeg_id == CODEC_ID_MPEG2VIDEO ||
- codec->ffmpeg_id == CODEC_ID_H263P ||
- codec->ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT))
+ codec->ffmpeg_id == CODEC_ID_H263P))
{
- avcodec_thread_init(context, file->cpus);
context->thread_count = file->cpus;
}
diff --git a/quicktime/qtffmpeg.c b/quicktime/qtffmpeg.c
index b384a83..c808da7 100644
--- a/quicktime/qtffmpeg.c
+++ b/quicktime/qtffmpeg.c
@@ -54,7 +54,6 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus,
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}
@@ -90,10 +89,8 @@ quicktime_ffmpeg_t* quicktime_new_ffmpeg(int cpus,
(ffmpeg_id == CODEC_ID_MPEG4 ||
ffmpeg_id == CODEC_ID_MPEG1VIDEO ||
ffmpeg_id == CODEC_ID_MPEG2VIDEO ||
- ffmpeg_id == CODEC_ID_H263P ||
- ffmpeg_id == CODEC_FLAG_H263P_SLICE_STRUCT))
+ ffmpeg_id == CODEC_ID_H263P))
{
- avcodec_thread_init(context, cpus);
context->thread_count = cpus;
}
if(avcodec_open(context,
@@ -183,6 +180,7 @@ static int decode_wrapper(quicktime_t *file,
if(!result)
{
+ AVPacket pkt;
// No way to determine if there was an error based on nonzero status.
@@ -191,11 +189,13 @@ static int decode_wrapper(quicktime_t *file,
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_NONREF /* AVDISCARD_BIDIR */;
else
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_DEFAULT;
- result = avcodec_decode_video(ffmpeg->decoder_context[current_field],
+ av_init_packet( &pkt );
+ pkt.data = ffmpeg->work_buffer;
+ pkt.size = bytes + header_bytes;
+ result = avcodec_decode_video2(ffmpeg->decoder_context[current_field],
&ffmpeg->picture[current_field],
&got_picture,
- ffmpeg->work_buffer,
- bytes + header_bytes);
+ &pkt);
diff --git a/quicktime/wma.c b/quicktime/wma.c
index c045741..f38bdce 100644
--- a/quicktime/wma.c
+++ b/quicktime/wma.c
@@ -67,7 +67,6 @@ static int init_decode(quicktime_audio_map_t *track_map,
if(!ffmpeg_initialized)
{
ffmpeg_initialized = 1;
- avcodec_init();
avcodec_register_all();
}
@@ -194,12 +193,16 @@ printf("decode 2 %x %llx %llx\n", chunk_size, chunk_offset, chunk_offset + chunk
codec->packet_buffer,
chunk_size);
#else
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
bytes_decoded = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- result = avcodec_decode_audio2(codec->decoder_context,
+ AVPacket pkt;
+ av_init_packet( &pkt );
+ pkt.data = codec->packet_buffer;
+ pkt.size = chunk_size;
+ result = avcodec_decode_audio3(codec->decoder_context,
(int16_t*)(codec->work_buffer + codec->output_size * sample_size),
&bytes_decoded,
- codec->packet_buffer,
- chunk_size);
+ &pkt);
#endif
pthread_mutex_unlock(&ffmpeg_lock);

View File

@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
cinelerra: cinelerra (GNU/Linux Video/Audio Studio)
cinelerra:
cinelerra: Cinelerra is the most advanced non-linear video editor
cinelerra: Cinelerra CV is the most advanced non-linear video editor
cinelerra: and compositor for Linux. It does primarily three main
cinelerra: things: capturing, compositing, and editing audio and
cinelerra: video with sample level accuracy.
cinelerra:
cinelerra: Homepage: http://cinelerra.org/
cinelerra: Homepage: http://cinelerra-cv.org/
cinelerra:
cinelerra:
cinelerra: