...
 
Commits (12)
2005-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* configure.ac:
Dev mode.
=== release 0.8.7 ===
2005-10-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* NEWS:
* RELEASE:
* configure.ac:
Release 0.8.7.
2005-10-21 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* autogen.sh:
* ext/ffmpeg/Makefile.am:
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
(gst_ffmpeg_caps_to_codecid), (gst_ffmpeg_get_codecid_longname):
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_register):
* ext/libpostproc/Makefile.am:
* ext/libpostproc/gstpostproc.h:
Update snapshot to thu 10/20 evening (EST/GMT-5). Adds QDM2 and
truemotion2 decoding support.
2005-10-03 Luca Ognibene <luogni@tin.it>
* ext/ffmpeg/gstffmpegdec.c (gst_ffmpegdec_frame):
Disable wrong check. Fix a "huge" memory leak when
changing from PLAYING -> READY in ffdec_mjpeg (and maybe others)
2005-10-02 Luca Ognibene <luogni@tin.it>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
(gst_ffmpegdec_close), (gst_ffmpegdec_open),
(gst_ffmpegdec_connect), (gst_ffmpegdec_negotiate),
(gst_ffmpegdec_frame), (gst_ffmpegdec_handle_event),
(gst_ffmpegdec_chain):
Use framerate from demuxer if it provides one
(#313970 and others)
Use also timestamp informations from the demuxer if we
are using its framerate info! (#317596)
2005-09-27 Luca Ognibene <luogni@tin.it>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_class_init),
(gst_ffmpegdec_init), (gst_ffmpegdec_finalize),
(gst_ffmpegdec_connect), (gst_ffmpegdec_chain):
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_class_init),
(gst_ffmpegenc_init), (gst_ffmpegenc_finalize),
(gst_ffmpegenc_link), (gst_ffmpegenc_chain_video),
(gst_ffmpegenc_chain_audio):
Move from dispose to finalize.
Add a lock around _chain and _link functions. This prevent
a segfault that can happens if the _link function is called while
the _chain function is running.
2005-09-05 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* gst-libs/ext/Makefile.am:
Use the autotools defined make, fixes bug #314320
2005-08-17 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect):
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_link):
If you ever crash again on premature fixation, I'll cut your @#$^#$
off, you ^$#^!#^.
2005-08-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* autogen.sh:
Increment ffmpeg date for some fixes.
2005-08-14 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
Add quicktime-RLE mapping.
2005-08-09 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* ext/ffmpeg/gstffmpegcodecmap.c:
Fix template to not allow fps=0 so that we don't get a floating
point exception on premature fixation (that's a disease, y'know?).
2005-08-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* autogen.sh:
Fixate snapshot, since this branch will need to work with the old
snapshot, even if we update the snapshot for HEAD.
* configure.ac:
Branch off 0.8, dev mode.
=== release 0.8.6 ===
2005-08-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* NEWS:
......
This is GStreamer FFMpeg 0.8.7
Changes since 0.8.6:
Bug fixes:
* fixed FPS setting, which was wrong for divx5
* fixes altivec detection so it runs on G3 CPUs, also
New elements:
* QDM2 decoder
Snapshot update:
* to 20/10
Bugs fixed since 0.8.6:
* 312764: --disable-encoders doesn't work
* 313223: gst-ffmpeg-0.8.6 fails to compile on a PPC
* 313970: ffdec_mpeg4 detects wrong framerate with some files
* 314320: gst ffmpeg calls "make" without caring about called make ...
* 315385: SIGFPE in gst_ffmpegdec_chain/gst_ffmpeg_time_gst_to_ff
* 317596: Gstreamer unable to play a qt video
* 319471: hooks.texi and faq.texi are missing from 0.8.6.2 tarball.
* 319482: altivec detections is broken.
This is GStreamer FFMpeg 0.8.6
Changes since 0.8.5:
......
GStreamer: Release notes for GStreamer FFmpeg 0.8.6 "Vamoz a la Playa"
GStreamer: Release notes for GStreamer FFmpeg 0.8.7 "Redneck soup"
The GStreamer team is happy to announce a new stable release of the
......@@ -16,23 +16,22 @@ regularly from our modifications.
Features of this release
* codecs for most popular formats
* snapshot update to 20/7
* new post-processing plugin
* added flv/vob muxers
* decoder performance improvements
* snapshot update to 20/10
* fixed FPS setting bug for divx5 movies
* fixed possible memleak in MJPEG decoding
* fixed altivec detection which caused it to not run on G3 CPUs
* added QDM2 decoding
Bugs fixed in this release
* 160665 : [ffdec_h264] VideoSoft h.264 videos (VSSH) make totem/ffd...
* 308335 : [PATCH] ffmpeg postprocessing plugins
* 308415 : gst-ffmpeg cvs doesn't build in
* 308804 : ffmpeg encoders do not set the GST_BUFFER_DELTA_UNIT flag
* 309050 : [PATCH] flv encoding
* 309051 : [PATCH] enable "streamheader" properties
* 309149 : [flv] flv demuxer/decoder doesn't set correct timestamps
* 310054 : [PATCH] fix flag handling for GST_FFMPEG_URL_STREAMHEADER
* 311593 : fix timestamps
* 311802 : [PATCH] local variable 'bq' for timestamp conversion unin...
* 312764 : --disable-encoders doesn't work
* 313223 : gst-ffmpeg-0.8.6 fails to compile on a PPC
* 313970 : ffdec_mpeg4 detects wrong framerate with some files
* 314320 : gst ffmpeg calls "make" without caring about called make ...
* 315385 : SIGFPE in gst_ffmpegdec_chain/gst_ffmpeg_time_gst_to_ff
* 317596 : Gstreamer unable to play a qt video
* 319471 : hooks.texi and faq.texi are missing from 0.8.6.2 tarball.
* 319482 : altivec detections is broken.
Download
......@@ -61,8 +60,6 @@ will create more lists as necessary.
Contributors to this release
* Ronald Bultje
* Edward Hervey
* Luca Ognibene
* Daniel Fischer
* Sebastien Cote
* Zaheer Abbas Merali
 
\ No newline at end of file
common @ 1cb5d7b7
Subproject commit 694de4dbf4827f372321f0634643a254d7edd986
Subproject commit 1cb5d7b76a01c711674c752015089e70c394fa99
......@@ -12,7 +12,7 @@ AM_MAINTAINER_MODE
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
AS_VERSION(gst-ffmpeg, GST_FFMPEG_VERSION, 0, 8, 6, 0, GST_CVS="no", GST_CVS="yes")
AS_VERSION(gst-ffmpeg, GST_FFMPEG_VERSION, 0, 8, 7, 1, GST_CVS="no", GST_CVS="yes")
dnl we cheat here so we don't have to change the actual configure code bit
GST_PLUGINS_VERSION_NANO=$GST_FFMPEG_VERSION_NANO
......
plugin_LTLIBRARIES = libgstffmpeg.la
libgstffmpeg_la_SOURCES = gstffmpeg.c \
......@@ -13,13 +12,15 @@ libgstffmpeg_la_SOURCES = gstffmpeg.c \
gstffmpegdeinterlace.c
libgstffmpeg_la_CFLAGS = $(GST_CFLAGS) \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavutil \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavformat \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavcodec
libgstffmpeg_la_LIBADD = \
$(top_builddir)/gst-libs/ext/ffmpeg/libavformat/libavformat.la \
$(top_builddir)/gst-libs/ext/ffmpeg/libavcodec/libavcodec.la
libgstffmpeg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
$(top_builddir)/gst-libs/ext/ffmpeg/libavformat/libavformat.la
#$(top_builddir)/gst-libs/ext/ffmpeg/libavcodec/libavcodec.la
#$(top_builddir)/gst-libs/ext/ffmpeg/libavutil/libavutil.la
libgstffmpeg_la_LDFLAGS = \
$(GST_PLUGIN_LDFLAGS)
noinst_HEADERS = \
gstffmpeg.h \
......
......@@ -94,7 +94,7 @@ gst_ffmpeg_set_palette (GstCaps *caps, AVCodecContext *context)
gst_caps_new_simple (mimetype, \
"width", GST_TYPE_INT_RANGE, 16, 4096, \
"height", GST_TYPE_INT_RANGE, 16, 4096, \
"framerate", GST_TYPE_DOUBLE_RANGE, (double) 0., \
"framerate", GST_TYPE_DOUBLE_RANGE, (double) 1., \
G_MAXDOUBLE, \
__VA_ARGS__, NULL)
......@@ -462,6 +462,17 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
}
break;
case CODEC_ID_QTRLE:
caps = GST_FF_VID_CAPS_NEW ("video/x-rle",
"layout", G_TYPE_STRING, "quicktime", NULL);
if (context) {
gst_caps_set_simple (caps,
"depth", G_TYPE_INT, (gint) context->bits_per_sample, NULL);
} else {
gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
}
break;
case CODEC_ID_MSVIDEO1:
caps = GST_FF_VID_CAPS_NEW ("video/x-msvideocodec",
"msvideoversion", G_TYPE_INT, 1, NULL);
......@@ -473,17 +484,21 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
"wmvversion", G_TYPE_INT, 3, NULL);
break;
case CODEC_ID_QDM2:
caps = GST_FF_AUD_CAPS_NEW ("audio/x-qdm2", NULL);
break;
case CODEC_ID_WS_VQA:
case CODEC_ID_IDCIN:
case CODEC_ID_8BPS:
case CODEC_ID_SMC:
case CODEC_ID_FLIC:
case CODEC_ID_TRUEMOTION1:
case CODEC_ID_TRUEMOTION2:
case CODEC_ID_VMDVIDEO:
case CODEC_ID_VMDAUDIO:
case CODEC_ID_MSZH:
case CODEC_ID_ZLIB:
case CODEC_ID_QTRLE:
case CODEC_ID_SONIC:
case CODEC_ID_SONIC_LS:
case CODEC_ID_SNOW:
......@@ -1562,6 +1577,9 @@ gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context)
} else if (!strcmp (mimetype, "audio/x-vorbis")) {
id = CODEC_ID_VORBIS;
audio = TRUE;
} else if (!strcmp (mimetype, "audio/x-qdm2")) {
id = CODEC_ID_QDM2;
audio = TRUE;
} else if (!strcmp (mimetype, "audio/mpeg")) {
gint layer = 0;
gint mpegversion = 0;
......@@ -1923,6 +1941,9 @@ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
case CODEC_ID_VORBIS:
name = "Vorbis audio";
break;
case CODEC_ID_QDM2:
name = "QDesign Music 2";
break;
case CODEC_ID_AC3:
name = "AC-3 audio";
break;
......@@ -2083,6 +2104,9 @@ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
case CODEC_ID_TRUEMOTION1:
name = "Duck Truemotion video";
break;
case CODEC_ID_TRUEMOTION2:
name = "Duck Truemotion 2 video";
break;
case CODEC_ID_VMDVIDEO:
name = "Sierra VMD video";
break;
......
This diff is collapsed.
......@@ -55,6 +55,8 @@ struct _GstFFMpegEnc
gint me_method;
gint gop_size;
gulong buffer_size;
GMutex *mainlock;
};
typedef struct _GstFFMpegEncClass GstFFMpegEncClass;
......@@ -130,7 +132,7 @@ static GHashTable *enc_global_plugins;
static void gst_ffmpegenc_class_init (GstFFMpegEncClass * klass);
static void gst_ffmpegenc_base_init (GstFFMpegEncClass * klass);
static void gst_ffmpegenc_init (GstFFMpegEnc * ffmpegenc);
static void gst_ffmpegenc_dispose (GObject * object);
static void gst_ffmpegenc_finalize (GObject * object);
static GstPadLinkReturn gst_ffmpegenc_link (GstPad * pad,
const GstCaps * caps);
......@@ -232,7 +234,7 @@ gst_ffmpegenc_class_init (GstFFMpegEncClass * klass)
gstelement_class->change_state = gst_ffmpegenc_change_state;
gobject_class->dispose = gst_ffmpegenc_dispose;
gobject_class->finalize = gst_ffmpegenc_finalize;
}
static void
......@@ -267,10 +269,12 @@ gst_ffmpegenc_init (GstFFMpegEnc * ffmpegenc)
gst_element_add_pad (GST_ELEMENT (ffmpegenc), ffmpegenc->sinkpad);
gst_element_add_pad (GST_ELEMENT (ffmpegenc), ffmpegenc->srcpad);
ffmpegenc->mainlock = g_mutex_new ();
}
static void
gst_ffmpegenc_dispose (GObject * object)
gst_ffmpegenc_finalize (GObject * object)
{
GstFFMpegEnc *ffmpegenc = (GstFFMpegEnc *) object;
......@@ -283,8 +287,10 @@ gst_ffmpegenc_dispose (GObject * object)
/* clean up remaining allocated data */
av_free (ffmpegenc->context);
av_free (ffmpegenc->picture);
g_mutex_free (ffmpegenc->mainlock);
G_OBJECT_CLASS (parent_class)->dispose (object);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static GstCaps *
......@@ -358,7 +364,9 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
GstFFMpegEnc *ffmpegenc = (GstFFMpegEnc *) gst_pad_get_parent (pad);
GstFFMpegEncClass *oclass =
(GstFFMpegEncClass *) G_OBJECT_GET_CLASS (ffmpegenc);
g_mutex_lock (ffmpegenc->mainlock);
/* close old session */
if (ffmpegenc->opened) {
avcodec_close (ffmpegenc->context);
......@@ -385,7 +393,8 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
/* fetch pix_fmt and so on */
gst_ffmpeg_caps_with_codectype (oclass->in_plugin->type,
caps, ffmpegenc->context);
if (!ffmpegenc->context->time_base.den) {
if (!ffmpegenc->context->time_base.den ||
!ffmpegenc->context->time_base.num) {
ffmpegenc->context->time_base.den = 25;
ffmpegenc->context->time_base.num = 1;
}
......@@ -398,6 +407,7 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
avcodec_close (ffmpegenc->context);
GST_DEBUG ("ffenc_%s: Failed to open FFMPEG codec",
oclass->in_plugin->name);
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_REFUSED;
}
......@@ -406,6 +416,7 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
avcodec_close (ffmpegenc->context);
GST_DEBUG ("ffenc_%s: AV wants different colourspace (%d given, %d wanted)",
oclass->in_plugin->name, pix_fmt, ffmpegenc->context->pix_fmt);
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_REFUSED;
}
......@@ -421,6 +432,7 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
if (!other_caps) {
avcodec_close (ffmpegenc->context);
GST_DEBUG ("Unsupported codec - no caps found");
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_REFUSED;
}
......@@ -429,6 +441,7 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
gst_caps_free (other_caps);
if (gst_caps_is_empty (icaps)) {
gst_caps_free (icaps);
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_REFUSED;
}
......@@ -447,6 +460,7 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
if (!gst_pad_set_explicit_caps (ffmpegenc->srcpad, icaps)) {
avcodec_close (ffmpegenc->context);
gst_caps_free (icaps);
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_REFUSED;
}
gst_caps_free (icaps);
......@@ -454,6 +468,8 @@ gst_ffmpegenc_link (GstPad * pad, const GstCaps * caps)
/* success! */
ffmpegenc->opened = TRUE;
g_mutex_unlock (ffmpegenc->mainlock);
return GST_PAD_LINK_OK;
}
......@@ -467,6 +483,8 @@ gst_ffmpegenc_chain_video (GstPad * pad, GstData * _data)
gint ret_size = 0, frame_size;
const AVRational bq = { 1, 1000000000 };
g_mutex_lock (ffmpegenc->mainlock);
/* FIXME: events (discont (flush!) and eos (close down) etc.) */
GST_DEBUG_OBJECT (ffmpegenc,
......@@ -477,7 +495,12 @@ gst_ffmpegenc_chain_video (GstPad * pad, GstData * _data)
GST_BUFFER_DATA (inbuf),
ffmpegenc->context->pix_fmt,
ffmpegenc->context->width, ffmpegenc->context->height);
g_return_if_fail (frame_size == GST_BUFFER_SIZE (inbuf));
if (frame_size != GST_BUFFER_SIZE (inbuf)) {
gst_buffer_unref (inbuf);
g_warning ("frame_size != GST_BUFFER_SIZE (inbuf)");
g_mutex_unlock (ffmpegenc->mainlock);
return ;
}
ffmpegenc->picture->pts =
gst_ffmpeg_time_gst_to_ff (GST_BUFFER_TIMESTAMP (inbuf),
......@@ -493,6 +516,7 @@ gst_ffmpegenc_chain_video (GstPad * pad, GstData * _data)
"ffenc_%s: failed to encode buffer", oclass->in_plugin->name);
gst_buffer_unref (inbuf);
gst_buffer_unref (outbuf);
g_mutex_unlock (ffmpegenc->mainlock);
return;
}
......@@ -506,6 +530,8 @@ gst_ffmpegenc_chain_video (GstPad * pad, GstData * _data)
gst_pad_push (ffmpegenc->srcpad, GST_DATA (outbuf));
gst_buffer_unref (inbuf);
g_mutex_unlock (ffmpegenc->mainlock);
}
static void
......@@ -516,6 +542,8 @@ gst_ffmpegenc_chain_audio (GstPad * pad, GstData * _data)
GstFFMpegEnc *ffmpegenc = (GstFFMpegEnc *) (gst_pad_get_parent (pad));
gint size, ret_size = 0, in_size, frame_size;
g_mutex_lock (ffmpegenc->mainlock);
size = GST_BUFFER_SIZE (inbuf);
/* FIXME: events (discont (flush!) and eos (close down) etc.) */
......@@ -555,6 +583,7 @@ gst_ffmpegenc_chain_audio (GstPad * pad, GstData * _data)
gst_buffer_unref (inbuf);
}
g_mutex_unlock (ffmpegenc->mainlock);
return;
}
......@@ -586,6 +615,7 @@ gst_ffmpegenc_chain_audio (GstPad * pad, GstData * _data)
gst_buffer_unref (inbuf);
gst_buffer_unref (outbuf);
gst_buffer_unref (subbuf);
g_mutex_unlock (ffmpegenc->mainlock);
return;
}
......@@ -596,6 +626,8 @@ gst_ffmpegenc_chain_audio (GstPad * pad, GstData * _data)
in_size -= frame_size;
gst_buffer_unref (subbuf);
g_mutex_unlock (ffmpegenc->mainlock);
}
}
......@@ -712,7 +744,7 @@ gst_ffmpegenc_register (GstPlugin * plugin)
if (in_plugin->id == CODEC_ID_RAWVIDEO ||
in_plugin->id == CODEC_ID_ZLIB ||
(in_plugin->id >= CODEC_ID_PCM_S16LE &&
in_plugin->id <= CODEC_ID_PCM_ALAW)) {
in_plugin->id <= CODEC_ID_PCM_S24DAUD)) {
goto next;
}
......
......@@ -4,14 +4,13 @@ plugin_LTLIBRARIES = libgstpostproc.la
libgstpostproc_la_SOURCES = gstpostproc.c
libgstpostproc_la_CFLAGS = $(GST_CFLAGS) \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavformat \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavutil \
-I $(top_srcdir)/gst-libs/ext/ffmpeg/libavcodec
libgstpostproc_la_LIBADD = \
$(top_builddir)/gst-libs/ext/ffmpeg/libavformat/libavformat.la \
$(top_builddir)/gst-libs/ext/ffmpeg/libavcodec/libavcodec.la
# $(top_builddir)/gst-libs/ext/ffmpeg/libavcodec/libpostproc/libffpostproc.la
#$(top_builddir)/gst-libs/ext/ffmpeg/libavutil/libavutil.la
libgstpostproc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
noinst_HEADERS = \
gstpostproc.h
\ No newline at end of file
gstpostproc.h
......@@ -21,10 +21,8 @@
#ifdef HAVE_FFMPEG_UNINSTALLED
#include <avcodec.h>
#include <avformat.h>
#else
#include <ffmpeg/avcodec.h>
#include <ffmpeg/avformat.h>
#endif
#include <gst/gst.h>
......
......@@ -12,4 +12,4 @@ SUBDIRS =
DIST_SUBDIRS = ffmpeg
all-local:
cd ffmpeg && make
cd ffmpeg && $(MAKE)