081f818478
ftp.altlinux.org /pub/people/thresh Tested by joerg@
149 lines
5.7 KiB
Text
149 lines
5.7 KiB
Text
$NetBSD: patch-af,v 1.1 2007/01/13 07:31:07 wiz Exp $
|
|
|
|
--- modules/codec/flac.c.orig 2004-04-25 18:08:39.000000000 +0000
|
|
+++ modules/codec/flac.c
|
|
@@ -31,6 +31,12 @@
|
|
|
|
#include <FLAC/stream_decoder.h>
|
|
#include <FLAC/stream_encoder.h>
|
|
+/* by LEGACY_FLAC we mean before FLAC 1.1.3 when the decoder/encoder APIs were simplified */
|
|
+# if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
|
|
+# define LEGACY_FLAC
|
|
+# else
|
|
+# undef LEGACY_FLAC
|
|
+#endif
|
|
|
|
#include "vlc_block_helper.h"
|
|
|
|
@@ -112,7 +118,12 @@ static int SyncInfo( decoder_t *, uint8_
|
|
|
|
static FLAC__StreamDecoderReadStatus
|
|
DecoderReadCallback( const FLAC__StreamDecoder *decoder,
|
|
- FLAC__byte buffer[], unsigned *bytes, void *client_data );
|
|
+#ifdef LEGACY_FLAC
|
|
+ FLAC__byte buffer[], unsigned *bytes,
|
|
+#else
|
|
+ FLAC__byte buffer[], size_t *bytes,
|
|
+#endif
|
|
+ void *client_data );
|
|
|
|
static FLAC__StreamDecoderWriteStatus
|
|
DecoderWriteCallback( const FLAC__StreamDecoder *decoder,
|
|
@@ -195,6 +206,7 @@ static int OpenDecoder( vlc_object_t *p_
|
|
return VLC_EGENERIC;
|
|
}
|
|
|
|
+#ifdef LEGACY_FLAC
|
|
FLAC__stream_decoder_set_read_callback( p_sys->p_flac,
|
|
DecoderReadCallback );
|
|
FLAC__stream_decoder_set_write_callback( p_sys->p_flac,
|
|
@@ -205,7 +217,12 @@ static int OpenDecoder( vlc_object_t *p_
|
|
DecoderErrorCallback );
|
|
FLAC__stream_decoder_set_client_data( p_sys->p_flac, p_dec );
|
|
|
|
+ /* really should check the return value here */
|
|
FLAC__stream_decoder_init( p_sys->p_flac );
|
|
+#else
|
|
+ /* really should check the return value here */
|
|
+ FLAC__stream_decoder_init_stream( p_sys->p_flac, DecoderReadCallback, NULL, NULL, NULL, NULL, DecoderWriteCallback, DecoderMetadataCallback, DecoderErrorCallback, p_dec );
|
|
+#endif
|
|
|
|
/* Set output properties */
|
|
p_dec->fmt_out.i_cat = AUDIO_ES;
|
|
@@ -450,7 +467,12 @@ static void CloseDecoder( vlc_object_t *
|
|
*****************************************************************************/
|
|
static FLAC__StreamDecoderReadStatus
|
|
DecoderReadCallback( const FLAC__StreamDecoder *decoder, FLAC__byte buffer[],
|
|
- unsigned *bytes, void *client_data )
|
|
+#ifdef LEGACY_FLAC
|
|
+ unsigned *bytes,
|
|
+#else
|
|
+ size_t *bytes,
|
|
+#endif
|
|
+ void *client_data )
|
|
{
|
|
decoder_t *p_dec = (decoder_t *)client_data;
|
|
decoder_sys_t *p_sys = p_dec->p_sys;
|
|
@@ -575,6 +597,11 @@ static void DecoderErrorCallback( const
|
|
msg_Err( p_dec, "frame's data did not match the CRC in the "
|
|
"footer." );
|
|
break;
|
|
+#ifndef LEGACY_FLAC
|
|
+ case FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM:
|
|
+ msg_Err( p_dec, "the decoder encountered reserved fields in use in the stream." );
|
|
+ break;
|
|
+#endif
|
|
default:
|
|
msg_Err( p_dec, "got decoder error: %d", status );
|
|
}
|
|
@@ -640,6 +667,7 @@ static void decoder_state_error( decoder
|
|
case FLAC__STREAM_DECODER_ABORTED:
|
|
msg_Err( p_dec, "the decoder was aborted by the read callback." );
|
|
break;
|
|
+#ifdef LEGACY_FLAC
|
|
case FLAC__STREAM_DECODER_UNPARSEABLE_STREAM:
|
|
msg_Err( p_dec, "the decoder encountered reserved fields in use "
|
|
"in the stream." );
|
|
@@ -656,6 +684,14 @@ static void decoder_state_error( decoder
|
|
msg_Err( p_dec, "FLAC__stream_decoder_init() was called without "
|
|
"all callbacks being set." );
|
|
break;
|
|
+#else
|
|
+ case FLAC__STREAM_DECODER_OGG_ERROR:
|
|
+ msg_Warn( p_dec, "an error occurred in the underlying Ogg layer." );
|
|
+ break;
|
|
+ case FLAC__STREAM_DECODER_SEEK_ERROR:
|
|
+ msg_Warn( p_dec, "an error occurred while seeking." );
|
|
+ break;
|
|
+#endif
|
|
case FLAC__STREAM_DECODER_UNINITIALIZED:
|
|
msg_Err( p_dec, "decoder in uninitialized state." );
|
|
break;
|
|
@@ -1046,7 +1082,11 @@ static block_t *Encode( encoder_t *, aou
|
|
static FLAC__StreamEncoderWriteStatus
|
|
EncoderWriteCallback( const FLAC__StreamEncoder *encoder,
|
|
const FLAC__byte buffer[],
|
|
+#ifdef LEGACY_FLAC
|
|
unsigned bytes, unsigned samples,
|
|
+#else
|
|
+ size_t bytes, unsigned samples,
|
|
+#endif
|
|
unsigned current_frame, void *client_data );
|
|
|
|
static void EncoderMetadataCallback( const FLAC__StreamEncoder *encoder,
|
|
@@ -1093,15 +1133,23 @@ static int OpenEncoder( vlc_object_t *p_
|
|
FLAC__stream_encoder_set_bits_per_sample( p_sys->p_flac, 16 );
|
|
p_enc->fmt_in.i_codec = AOUT_FMT_S16_NE;
|
|
|
|
+#ifdef LEGACY_FLAC
|
|
FLAC__stream_encoder_set_write_callback( p_sys->p_flac,
|
|
EncoderWriteCallback );
|
|
FLAC__stream_encoder_set_metadata_callback( p_sys->p_flac,
|
|
EncoderMetadataCallback );
|
|
FLAC__stream_encoder_set_client_data( p_sys->p_flac, p_enc );
|
|
+#endif
|
|
|
|
/* Get and store the STREAMINFO metadata block as a p_extra */
|
|
p_sys->p_chain = 0;
|
|
+#ifdef LEGACY_FLAC
|
|
+ /* really should check the return value here */
|
|
FLAC__stream_encoder_init( p_sys->p_flac );
|
|
+#else
|
|
+ /* really should check the return value here */
|
|
+ FLAC__stream_encoder_init_stream( p_sys->p_flac, EncoderWriteCallback, NULL, NULL, EncoderMetadataCallback, p_enc );
|
|
+#endif
|
|
|
|
return VLC_SUCCESS;
|
|
}
|
|
@@ -1178,7 +1226,11 @@ static void EncoderMetadataCallback( con
|
|
static FLAC__StreamEncoderWriteStatus
|
|
EncoderWriteCallback( const FLAC__StreamEncoder *encoder,
|
|
const FLAC__byte buffer[],
|
|
+#ifdef LEGACY_FLAC
|
|
unsigned bytes, unsigned samples,
|
|
+#else
|
|
+ size_t bytes, unsigned samples,
|
|
+#endif
|
|
unsigned current_frame, void *client_data )
|
|
{
|
|
encoder_t *p_enc = (encoder_t *)client_data;
|