Commit graph

255 commits

Author SHA1 Message Date
Sebastian Dröge 1c283b8c22 ffmpegdec: Fix compiler warning and indention 2009-08-06 06:57:18 +02:00
Руслан Ижбулатов 54428c186b ffmpegdec: Assign offsets to outgoing buffers more accurate
This now uses ffmpeg functionality to keep random metadata next to
the buffers and to get the correct offset for a frame, similar to how
timestamps are handled.

Fixes bug #578278.
2009-08-06 06:57:09 +02:00
Olivier Crête 597f32e895 ffmpegdec: Disable theora decoder
The wrapper does not give the decoder the extradata correctly.
Just use theoradec.

Fixes bug #590172
2009-07-29 14:49:56 -04:00
Руслан Ижбулатов a5f9485917 Codec frame delay fix and trailing zero-length frame fix
Takes codec frame delay into account (roughly the same way it does for timestamps for reordered frames) to produce frames with correct offsets.
A special hack to allow trailing frame with timestamp=segment.stop to be displayed.

Fixes bug #578278.
2009-07-29 14:19:20 +02:00
Wim Taymans fe10ecd097 ffdec: don't wait for keyframe after discont
After a DISCONT, mark the next frame with DISCONT but don't wait for a new
keyframe. This greatly improves performance on lossy networks or currupted
frames as the decoder can usually continue and conceil errors up to the next
keyframe.
2009-07-01 11:23:59 +02:00
Wim Taymans 31a9d9330b Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-ffmpeg 2009-07-01 11:21:46 +02:00
Edward Hervey fe2291e9e1 gstffmpegdec: Fix debug arguments. Fixes #587297 2009-06-29 13:53:50 +02:00
Arnout Vandecappelle 0192717045 ffmpegdec: don't drop buffers when caps change.
Fixes #585257
2009-06-25 16:05:56 +02:00
Jan Schmidt 473d7391a9 ffmpeg: Don't enter infinite loops in the timestamp tracking
Avoid an infinite loop consuming buffer timestamp info when
the video frames contain only GST_CLOCK_TIME_NONE timestamps.

Add some debug logging in the timestamp tracking paths.

Fixes: #585845
2009-06-24 15:20:12 +01:00
Wim Taymans 608a920771 ffmpegdec: don't do QoS on invalid timestamps
When we convert the timestamp to running_time, don't try to do QoS on invalid
times.

Fixes #580810
2009-06-05 13:47:15 +02:00
Jordi Mas cfbb046f1e ffmpeg: make elements reusable after registry rescan
If the same instance of the plugin is asked to be initialised more that once,
instances after the first one do not register the elements properly and the
elements become not usable.

For example, if you call gst_update_registry (), is not possible to create
elements after the call since the plugin is asked to be initialised again and
does not register the elements.

Fixes #584291
2009-06-05 13:19:03 +02:00
Wim Taymans 686aadaf01 ffmpeg: properly integrate timestamp handling
The patch from Bug #580796 hacked around existing infrastructure to handle
timestamps as DTS (as in all AVI files) causing the logic to be disabled.

Properly hook the timestamp handling into the existing infrastructure to handle
these cases too, partially reverting a26b94d92c
and moving some stuff around.

Refixes #580796.
2009-06-05 12:32:25 +02:00
Edward Hervey 9fdc5a5d64 gstffmpegdec: demote mpeg2 video decoding back to MARGINAL. Fixes #574461 2009-05-13 19:35:32 +02:00
Edward Hervey ee5a964293 gstffmpegdec: Don't forget to copy over the reordered_opaque in our buffers.
This is to be on-par with the default get_buffer() implementation (which is
detailed in libavcodec/utils.c).
2009-05-13 13:47:58 +02:00
Vanista a26b94d92c gstffmpegdec: Handle out-of-order frames. Fixes #580796 2009-05-13 12:45:38 +02:00
Edward Hervey f384b2a006 gstffmpegdec: No, really, we don't want the VDPAU decoders.
They've changed the names, keeping the old ones til we switch upstream
revision.
2009-05-12 15:30:10 +02:00
Sebastian Dröge b9617cac31 ffdec: Update rank of ffdec_mpeg2video to SECONDARY to make it the default
ffdec_mpeg2video is much faster, fixes bug #574461.
2009-05-12 11:21:01 +02:00
Edward Hervey fb613191ae gstffmpegdec: Implement interlaced support.
ffmpeg only tells us on a per-decoded-buffer basis if the stream is
interlaced or not. When we see a change, we force negotiation.

We can't detect that in our get_buffer() (when doing downstream allocation),
because at that point the interlaced flags aren't set on the outgoing
buffer.
2009-05-12 11:16:43 +02:00
Edward Hervey 57e66c5a22 Make sure we provide ffmpeg with 128bit-aligned data.
Add a new function new_aligned_buffer() which creates a GstBuffer of
the requested size/caps, with the memory being allocated/freed by ffmpeg's
av_malloc/av_free which guarantees properly aligned memory.
Added a can_allocate_aligned internal property which we use to figure out
whether downstream can provide us with 128bit aligned buffers.
2009-04-21 18:28:54 +02:00
Edward Hervey ae018718d4 gstffmpegdec: Really fix the arguments this time.
I blame compilers who can't figure out there's the wrong number of arguments
for the given print format :)
2009-04-18 09:08:39 +02:00
Edward Hervey 199d95c390 gstffmpegdec: Fix build on macosx.
The arguments were in the wrong order (and therefore the types were wrong).
2009-04-18 08:50:12 +02:00
Wim Taymans 010871cb77 ffmpegdec: resize padding buffer when it's small
Only resize the padding buffer when the size is too small, when it's just right,
we don't need to call realloc.
2009-04-17 19:07:26 +02:00
Edward Hervey cc7ce2639c Move all non-codecmap-related methods to a new file.
We were starting to get too much unrelated code in there. This makes it
a bit easier to maintain.
2009-04-15 22:33:16 +02:00
Edward Hervey f3c1a56a60 The proper spelling is 'FFmpeg'. 2009-04-15 22:11:10 +02:00
Edward Hervey 9b8a99761a Disable more fake codecs (raw audio). 2009-04-15 21:56:00 +02:00
LRN 2b25dbe12e ffdec: copy input offsets to output buffers
Copy the incomming offsets to the outgoing buffers.
Fixes 578278.
2009-04-10 00:19:50 +02:00
Edward Hervey 7ca2836193 Take into account ticks_per_frame for framerate calculation. Fixes #575759 2009-03-17 23:45:34 +01:00
Edward Hervey 59796dd0bc gstffmpegdec: Disable vdpau decoders. Fixes #573400 2009-03-11 13:25:40 +01:00
Edward Hervey 1e689f057f Disable exposing decoder/encoder using external library. Fixes #574746 2009-03-10 21:11:43 +01:00
Edward Hervey 8cfa2c4314 gstffmpegdec: Use 64bit scaling function to avoid overflows detected in some situations. 2009-03-09 18:18:24 +01:00
Edward Hervey 98167578c4 ffmpegdec: Make sure we provide 16 byte aligned data to ffmpeg. Fixes #572863
We simply allocate the memory using ffmpeg's av_malloc which provides us
with properly memalign'ed data.
This avoids write-outside-of-bounds when sse/altivec code is being used.
2009-03-06 17:37:51 +01:00
Tim-Philipp Müller c389f49295 ffmpegdec: post an error message on the bus when decoding fails
We should post a STREAM DECODE error message on the bus when we return
GST_FLOW_ERROR, otherwise the user ends up seeing an ugly internal flow
error message, which isn't very nice.
2009-03-06 11:01:55 +00:00
Edward Hervey eeffd7b87f gstffmpegdec: Set the rank of the AAC decoder to NONE.
It will stay this way until the ffmpeg aac decoder can report before decoding
whether it can handle a given stream or not.
2009-03-05 12:09:32 +01:00
Tim-Philipp Müller 30805cd2c4 ffdec: fix build 2009-03-04 20:58:08 +00:00
Edward Hervey 9eb48ddcda gstffmpegdec: Abort on first failure by AAC decoder. Fixes #566250.
The problem is that the ffmpeg aac decoder fails... but still accepts
the following buffers as if nothing happened. But because some things
were not properly set in the internal code, all hell breaks loose.
2009-03-04 21:10:22 +01:00
Edward Hervey ec1ff94e7b gstffmpegdec: Bring the real decoders up to GST_RANK_PRIMARY.
They have proven by now that they're more reliable than the
-bad real wrapper plugins.
2009-03-04 20:04:25 +01:00
Edward Hervey 9fc91546ea Only use valid SampleFormat for audio encoders/decoders.
For a given AVCodec, when the sample_fmts field is non-NULL, that means that
that codec can only handle a specific set of SampleFormat.
With this patch, we now look for its presence and create the proper pad template
caps.
Fixes #569441
2009-01-29 07:48:19 +01:00
Sebastian Dröge 0376e7049a Add MP1 and ADPCM IMA/ISS variant 2009-01-24 17:59:11 +01:00
Edward Hervey 3d089f4862 ext/ffmpeg/gstffmpegcodecmap.*: Add mapping for EAC3 and QCELP audio codecs.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ff_aud_caps_new),
(gst_ffmpeg_codecid_to_caps), (gst_ffmpeg_smpfmt_to_caps),
(gst_ffmpeg_codectype_to_caps), (gst_ffmpeg_caps_to_smpfmt),
(gst_ffmpeg_caps_to_codecid), (av_smp_format_depth):
* ext/ffmpeg/gstffmpegcodecmap.h:
Add mapping for EAC3 and QCELP audio codecs.
Add conversion functions for all available audo SampleFormat.
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_open),
(gst_ffmpegdec_setcaps), (gst_ffmpegdec_negotiate),
(clip_audio_buffer), (gst_ffmpegdec_audio_frame):
Remove assumptions that we can only handle stereo 16bit signed integer
audio, and store the depth locally.
2008-12-17 12:05:12 +00:00
Edward Hervey 4540e7d752 ext/ffmpeg/gstffmpegdec.c: Fix check for memory to free.
Original commit message from CVS:
reviewed by: Edward Hervey  <edward.hervey@collabora.co.uk>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_finalize):
Fix check for memory to free.
Fixes #560644
2008-12-03 17:43:45 +00:00
Wim Taymans 28cc187f59 ext/ffmpeg/gstffmpegcodecmap.c: Initialize some more variables.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_avpicture_fill):
Initialize some more variables.
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_setcaps),
(alloc_output_buffer):
Disable direct rendering for h264, some functions just seem to read from
invalid memory.
2008-11-07 11:43:42 +00:00
Wim Taymans 4ad12e4818 ext/ffmpeg/: Add G_PARAM_STATIC_STRINGS to avoid numerous strcpy calls.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegcfg.c: (gst_ffmpeg_cfg_init):
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_class_init),
(gst_ffmpegdec_init), (gst_ffmpegdec_setcaps),
(gst_ffmpegdec_get_buffer), (get_output_buffer),
(gst_ffmpegdec_set_property), (gst_ffmpegdec_get_property):
Add G_PARAM_STATIC_STRINGS to avoid numerous strcpy calls.
2008-11-06 11:47:40 +00:00
Wim Taymans fe4e398482 ext/ffmpeg/gstffmpegdec.c: Enable direct rendering.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_setcaps),
(gst_ffmpegdec_get_buffer), (get_output_buffer):
Enable direct rendering.
Add some more debug info about image strides.
2008-11-05 17:05:46 +00:00
Alexis Ballier 42cf6d213f Update ffmpeg/swscale snapshot to the latest revision and adjust to API changes. Fixes bug #556405.
Original commit message from CVS:
Based on a patch by: Alexis Ballier <aballier at gentoo dot org>
* configure.ac:
* ext/ffmpeg/gstffmpeg.c:
* ext/ffmpeg/gstffmpeg.h:
* ext/ffmpeg/gstffmpegaudioresample.c:
* ext/ffmpeg/gstffmpegcfg.c: (gst_ffmpeg_flags_get_type),
(gst_ffmpeg_cfg_init):
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
(gst_ffmpeg_caps_to_pixfmt), (gst_ffmpeg_caps_with_codecid):
* ext/ffmpeg/gstffmpegcodecmap.h:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_setcaps),
(gst_ffmpegdec_register):
* ext/ffmpeg/gstffmpegdeinterlace.c:
* ext/ffmpeg/gstffmpegdemux.c:
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_getcaps),
(gst_ffmpegenc_setcaps), (gst_ffmpegenc_register):
* ext/ffmpeg/gstffmpegmux.c:
* ext/ffmpeg/gstffmpegprotocol.c: (gst_ffmpegdata_seek):
* ext/libpostproc/gstpostproc.c:
* ffmpegrev:
Update ffmpeg/swscale snapshot to the latest revision and adjust
to API changes. Fixes bug #556405.
Require libavutil for swscale too when building with an external
ffmpeg and fix includes for external ffmpeg.
2008-10-30 12:05:45 +00:00
Robin Stocker e6425e766d ext/ffmpeg/gstffmpegdec.c: If both, the decoder and the demuxer, provide a non-1:1 PAR prefer the one of the demuxer ...
Original commit message from CVS:
Patch by: Robin Stocker <robin at nibor dot org>
* ext/ffmpeg/gstffmpegdec.c:
(gst_ffmpegdec_add_pixel_aspect_ratio):
If both, the decoder and the demuxer, provide a non-1:1 PAR
prefer the one of the demuxer instead of the one of the decoder.
Fixes bug #556336.
2008-10-15 11:28:05 +00:00
Mark Nauwelaerts cc082f9b32 ext/ffmpeg/: Add some more width/height/channels/rate limitations to caps to cater for more automagic negotiation. A...
Original commit message from CVS:
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ff_vid_caps_new),
(gst_ff_aud_caps_new), (gst_ffmpeg_codecid_to_caps),
(gst_ffmpeg_codectype_to_caps):
* ext/ffmpeg/gstffmpegcodecmap.h:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_negotiate),
(gst_ffmpegdec_register):
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_getcaps),
(gst_ffmpegenc_register):
Add some more width/height/channels/rate limitations to caps
to cater for more automagic negotiation.  Addresses #532422.
2008-10-08 14:20:37 +00:00
Wim Taymans d16e6f1ecc ext/ffmpeg/gstffmpegdec.c: If we have a parser and we did not consume any of the bytes of a new buffer, make sure we ...
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_frame),
(gst_ffmpegdec_chain):
If we have a parser and we did not consume any of the bytes of a new
buffer, make sure we submit the buffer again with its original timestamp
instead of a -1 timestamp. Fixes various h264 cases with reordered
frames.
If we have a discont and a timestamp but the first buffer after the
discont did not produce any data, make sure we set the timestamp on the
next buffer instead. Fixes initial timestamp on realaudio in many cases.
2008-09-04 14:08:50 +00:00
Edward Hervey d16582feb6 ext/ffmpeg/gstffmpegdec.c: Finalizing a decoder that was never used shouldn't trigger an assertion.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_finalize),
(gst_ffmpegdec_get_buffer), (gst_ffmpegdec_frame):
Finalizing a decoder that was never used shouldn't trigger an assertion.
Add debug messages for the two other g_assert_if_reached().
2008-08-29 09:59:29 +00:00
Jan Schmidt 17e954b034 ext/ffmpeg/gstffmpegdec.c: If ffmpeg reports 0 bytes of input data consumed, don't break out unless it also didn't pr...
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c:
If ffmpeg reports 0 bytes of input data consumed, don't break out
unless it also didn't produce any output. Fixes the audio in #377400
and doesn't break anything else I've tested.
Enable the mp3 parser, and set mp3 and mpeg2-video decoding autoplug
at marginal level, as they seem to both work fine now.
2008-07-01 09:39:19 +00:00
Edward Hervey 1df167a9d6 ext/ffmpeg/: FFMpeg now provides proper long_name for AVCodec, remove our internal mapping and directly use upstream ...
Original commit message from CVS:
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
(gst_ffmpeg_get_codecid_longname):
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_base_init),
(gst_ffmpegdec_register):
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_base_init),
(gst_ffmpegenc_register):
* ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_register):
FFMpeg now provides proper long_name for AVCodec, remove our
internal mapping and directly use upstream naming.
Improve debugging messages.
Remove g_warning() which isn't really needed.
2008-06-13 17:06:55 +00:00