mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
ext/faad/gstfaad.*: If we encounter a decoding error, don't error out immediately, but try to resync (or see if we ha...
Original commit message from CVS: Patch by: Young-Ho Cha <ganadist chollian net> * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chain), (gst_faad_change_state): * ext/faad/gstfaad.h: If we encounter a decoding error, don't error out immediately, but try to resync (or see if we have better luck with the next buffer in case of framed input). Only error out after five consecutive errors. Fixes #341563.
This commit is contained in:
parent
3ca1e62f03
commit
15bae29658
3 changed files with 28 additions and 2 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2006-05-13 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
Patch by: Young-Ho Cha <ganadist chollian net>
|
||||||
|
|
||||||
|
* ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chain),
|
||||||
|
(gst_faad_change_state):
|
||||||
|
* ext/faad/gstfaad.h:
|
||||||
|
If we encounter a decoding error, don't error out immediately,
|
||||||
|
but try to resync (or see if we have better luck with the next
|
||||||
|
buffer in case of framed input). Only error out after five
|
||||||
|
consecutive errors. Fixes #341563.
|
||||||
|
|
||||||
2006-05-12 Wim Taymans <wim@fluendo.com>
|
2006-05-12 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init),
|
* ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init),
|
||||||
|
|
|
@ -51,6 +51,8 @@ extern int8_t faacDecInit2 (faacDecHandle, guint8 *, guint32,
|
||||||
GST_DEBUG_CATEGORY_STATIC (faad_debug);
|
GST_DEBUG_CATEGORY_STATIC (faad_debug);
|
||||||
#define GST_CAT_DEFAULT faad_debug
|
#define GST_CAT_DEFAULT faad_debug
|
||||||
|
|
||||||
|
#define MAX_DECODE_ERRORS 5
|
||||||
|
|
||||||
static const GstElementDetails faad_details =
|
static const GstElementDetails faad_details =
|
||||||
GST_ELEMENT_DETAILS ("AAC audio decoder",
|
GST_ELEMENT_DETAILS ("AAC audio decoder",
|
||||||
"Codec/Decoder/Audio",
|
"Codec/Decoder/Audio",
|
||||||
|
@ -192,6 +194,7 @@ gst_faad_init (GstFaad * faad)
|
||||||
faad->bytes_in = 0;
|
faad->bytes_in = 0;
|
||||||
faad->sum_dur_out = 0;
|
faad->sum_dur_out = 0;
|
||||||
faad->packetised = FALSE;
|
faad->packetised = FALSE;
|
||||||
|
faad->error_count = 0;
|
||||||
|
|
||||||
faad->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
|
faad->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
|
||||||
gst_element_add_pad (GST_ELEMENT (faad), faad->sinkpad);
|
gst_element_add_pad (GST_ELEMENT (faad), faad->sinkpad);
|
||||||
|
@ -1208,8 +1211,17 @@ gst_faad_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
out = faacDecDecode (faad->handle, &info, input_data + skip_bytes,
|
out = faacDecDecode (faad->handle, &info, input_data + skip_bytes,
|
||||||
input_size - skip_bytes);
|
input_size - skip_bytes);
|
||||||
|
|
||||||
if (info.error)
|
if (info.error) {
|
||||||
goto decode_error;
|
faad->error_count++;
|
||||||
|
if (faad->error_count >= MAX_DECODE_ERRORS)
|
||||||
|
goto decode_error;
|
||||||
|
GST_DEBUG_OBJECT (faad,
|
||||||
|
"Failed to decode buffer: %s, count = %d, trying to resync",
|
||||||
|
faacDecGetErrorMessage (info.error), faad->error_count);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
faad->error_count = 0; /* all fine, reset error counter */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info.bytesconsumed > input_size)
|
if (info.bytesconsumed > input_size)
|
||||||
|
@ -1387,6 +1399,7 @@ gst_faad_change_state (GstElement * element, GstStateChange transition)
|
||||||
faad->prev_ts = GST_CLOCK_TIME_NONE;
|
faad->prev_ts = GST_CLOCK_TIME_NONE;
|
||||||
faad->bytes_in = 0;
|
faad->bytes_in = 0;
|
||||||
faad->sum_dur_out = 0;
|
faad->sum_dur_out = 0;
|
||||||
|
faad->error_count = 0;
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||||
gst_faad_close_decoder (faad);
|
gst_faad_close_decoder (faad);
|
||||||
|
|
|
@ -63,6 +63,7 @@ typedef struct _GstFaad {
|
||||||
gint64 next_ts; /* timestamp of next buffer */
|
gint64 next_ts; /* timestamp of next buffer */
|
||||||
guint64 bytes_in; /* bytes received */
|
guint64 bytes_in; /* bytes received */
|
||||||
guint64 sum_dur_out; /* sum of durations of decoded buffers we sent out */
|
guint64 sum_dur_out; /* sum of durations of decoded buffers we sent out */
|
||||||
|
gint error_count;
|
||||||
} GstFaad;
|
} GstFaad;
|
||||||
|
|
||||||
typedef struct _GstFaadClass {
|
typedef struct _GstFaadClass {
|
||||||
|
|
Loading…
Reference in a new issue