mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-14 05:12:09 +00:00
mpg123: fixed bug with last frame, disabled internal resampler & chatter
* The last MP3 frame wasn't being pushed when base class was draining * Made sure mpg123 cannot ever use its (crude) internal resampler * Disabled mpg123 stderr output https://bugzilla.gnome.org/show_bug.cgi?id=686595
This commit is contained in:
parent
08707937dd
commit
09cda09f9c
1 changed files with 15 additions and 11 deletions
|
@ -228,6 +228,11 @@ gst_mpg123_audio_dec_start (GstAudioDecoder * dec)
|
||||||
/* Sets the resync limit to the end of the stream (otherwise mpg123 may give
|
/* Sets the resync limit to the end of the stream (otherwise mpg123 may give
|
||||||
* up on decoding prematurely, especially with mp3 web radios) */
|
* up on decoding prematurely, especially with mp3 web radios) */
|
||||||
mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0);
|
mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0);
|
||||||
|
/* Don't let mpg123 resample output */
|
||||||
|
mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS,
|
||||||
|
MPG123_AUTO_RESAMPLE, 0);
|
||||||
|
/* Don't let mpg123 print messages to stdout/stderr */
|
||||||
|
mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
|
||||||
|
|
||||||
/* Open in feed mode (= encoded data is fed manually into the handle). */
|
/* Open in feed mode (= encoded data is fed manually into the handle). */
|
||||||
error = mpg123_open_feed (mpg123_decoder->handle);
|
error = mpg123_open_feed (mpg123_decoder->handle);
|
||||||
|
@ -315,24 +320,23 @@ gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec,
|
||||||
size_t num_decoded_bytes;
|
size_t num_decoded_bytes;
|
||||||
GstFlowReturn retval;
|
GstFlowReturn retval;
|
||||||
|
|
||||||
if (G_UNLIKELY (input_buffer == NULL))
|
|
||||||
return GST_FLOW_OK;
|
|
||||||
|
|
||||||
mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
|
mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
|
||||||
|
|
||||||
g_assert (mpg123_decoder->handle != NULL);
|
g_assert (mpg123_decoder->handle != NULL);
|
||||||
|
|
||||||
/* The actual decoding */
|
/* The actual decoding */
|
||||||
{
|
{
|
||||||
GstMapInfo info;
|
/* feed input data (if there is any) */
|
||||||
|
if (G_LIKELY (input_buffer != NULL)) {
|
||||||
|
GstMapInfo info;
|
||||||
|
|
||||||
/* feed input data */
|
if (gst_buffer_map (input_buffer, &info, GST_MAP_READ)) {
|
||||||
if (gst_buffer_map (input_buffer, &info, GST_MAP_READ)) {
|
mpg123_feed (mpg123_decoder->handle, info.data, info.size);
|
||||||
mpg123_feed (mpg123_decoder->handle, info.data, info.size);
|
gst_buffer_unmap (input_buffer, &info);
|
||||||
gst_buffer_unmap (input_buffer, &info);
|
} else {
|
||||||
} else {
|
GST_ERROR_OBJECT (mpg123_decoder, "gst_memory_map() failed");
|
||||||
GST_ERROR_OBJECT (mpg123_decoder, "gst_memory_map() failed");
|
return GST_FLOW_ERROR;
|
||||||
return GST_FLOW_ERROR;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to decode a frame */
|
/* Try to decode a frame */
|
||||||
|
|
Loading…
Reference in a new issue