static void gst_flac_dec_setup_stream_decoder (GstFlacDec * flacdec);
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamDecoderReadStatus
-gst_flac_dec_read_seekable (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__byte buffer[], unsigned *bytes, void *client_data);
-static FLAC__SeekableStreamDecoderSeekStatus
-gst_flac_dec_seek (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 position, void *client_data);
-static FLAC__SeekableStreamDecoderTellStatus
-gst_flac_dec_tell (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 * position, void *client_data);
-static FLAC__SeekableStreamDecoderLengthStatus
-gst_flac_dec_length (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 * length, void *client_data);
-static FLAC__bool gst_flac_dec_eof (const FLAC__SeekableStreamDecoder * decoder,
- void *client_data);
-static FLAC__StreamDecoderReadStatus
-gst_flac_dec_read_stream (const FLAC__StreamDecoder * decoder,
- FLAC__byte buffer[], unsigned *bytes, void *client_data);
-static FLAC__StreamDecoderWriteStatus
-gst_flac_dec_write_seekable (const FLAC__SeekableStreamDecoder * decoder,
- const FLAC__Frame * frame,
- const FLAC__int32 * const buffer[], void *client_data);
-static FLAC__StreamDecoderWriteStatus
-gst_flac_dec_write_stream (const FLAC__StreamDecoder * decoder,
- const FLAC__Frame * frame,
- const FLAC__int32 * const buffer[], void *client_data);
-static void gst_flac_dec_metadata_callback_seekable (const
- FLAC__SeekableStreamDecoder * decoder,
- const FLAC__StreamMetadata * metadata, void *client_data);
-static void gst_flac_dec_metadata_callback_stream (const FLAC__StreamDecoder *
- decoder, const FLAC__StreamMetadata * metadata, void *client_data);
-static void gst_flac_dec_metadata_callback (GstFlacDec * flacdec,
- const FLAC__StreamMetadata * metadata);
-static void gst_flac_dec_error_callback_seekable (const
- FLAC__SeekableStreamDecoder * decoder,
- FLAC__StreamDecoderErrorStatus status, void *client_data);
-static void gst_flac_dec_error_callback_stream (const FLAC__StreamDecoder *
- decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-#else
static FLAC__StreamDecoderReadStatus
gst_flac_dec_read_seekable (const FLAC__StreamDecoder * decoder,
FLAC__byte buffer[], size_t * bytes, void *client_data);
decoder, const FLAC__StreamMetadata * metadata, void *client_data);
static void gst_flac_dec_error_callback_stream (const FLAC__StreamDecoder *
decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-#endif
GST_BOILERPLATE (GstFlacDec, gst_flac_dec, GstElement, GST_TYPE_ELEMENT);
gst_flac_dec_reset_decoders (GstFlacDec * flacdec)
{
if (flacdec->seekable_decoder) {
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_decoder_delete (flacdec->seekable_decoder);
-#else
FLAC__stream_decoder_delete (flacdec->seekable_decoder);
-#endif
flacdec->seekable_decoder = NULL;
}
gst_tag_list_add (dec->tags, GST_TAG_MERGE_REPLACE,
GST_TAG_AUDIO_CODEC, "FLAC", NULL);
-#ifdef LEGACY_FLAC
- dec->seekable_decoder = FLAC__seekable_stream_decoder_new ();
-
- FLAC__seekable_stream_decoder_set_read_callback (dec->seekable_decoder,
- gst_flac_dec_read_seekable);
- FLAC__seekable_stream_decoder_set_seek_callback (dec->seekable_decoder,
- gst_flac_dec_seek);
- FLAC__seekable_stream_decoder_set_tell_callback (dec->seekable_decoder,
- gst_flac_dec_tell);
- FLAC__seekable_stream_decoder_set_length_callback (dec->seekable_decoder,
- gst_flac_dec_length);
- FLAC__seekable_stream_decoder_set_eof_callback (dec->seekable_decoder,
- gst_flac_dec_eof);
- FLAC__seekable_stream_decoder_set_write_callback (dec->seekable_decoder,
- gst_flac_dec_write_seekable);
- FLAC__seekable_stream_decoder_set_metadata_respond (dec->seekable_decoder,
- FLAC__METADATA_TYPE_VORBIS_COMMENT);
- FLAC__seekable_stream_decoder_set_metadata_callback (dec->seekable_decoder,
- gst_flac_dec_metadata_callback_seekable);
- FLAC__seekable_stream_decoder_set_error_callback (dec->seekable_decoder,
- gst_flac_dec_error_callback_seekable);
- FLAC__seekable_stream_decoder_set_client_data (dec->seekable_decoder, dec);
-#else
dec->seekable_decoder = FLAC__stream_decoder_new ();
FLAC__stream_decoder_set_metadata_respond (dec->seekable_decoder,
FLAC__METADATA_TYPE_VORBIS_COMMENT);
FLAC__stream_decoder_set_metadata_respond (dec->seekable_decoder,
FLAC__METADATA_TYPE_PICTURE);
FLAC__stream_decoder_set_md5_checking (dec->seekable_decoder, false); /* no point calculating since it's never checked here */
-#endif
}
static void
dec->stream_decoder = FLAC__stream_decoder_new ();
-#ifdef LEGACY_FLAC
- FLAC__stream_decoder_set_read_callback (dec->stream_decoder,
- gst_flac_dec_read_stream);
- FLAC__stream_decoder_set_write_callback (dec->stream_decoder,
- gst_flac_dec_write_stream);
- FLAC__stream_decoder_set_metadata_respond (dec->stream_decoder,
- FLAC__METADATA_TYPE_VORBIS_COMMENT);
- FLAC__stream_decoder_set_metadata_callback (dec->stream_decoder,
- gst_flac_dec_metadata_callback_stream);
- FLAC__stream_decoder_set_error_callback (dec->stream_decoder,
- gst_flac_dec_error_callback_stream);
- FLAC__stream_decoder_set_client_data (dec->stream_decoder, dec);
-#else
FLAC__stream_decoder_set_md5_checking (dec->stream_decoder, false); /* no point calculating since it's never checked here */
FLAC__stream_decoder_set_metadata_respond (dec->stream_decoder,
FLAC__METADATA_TYPE_VORBIS_COMMENT);
FLAC__stream_decoder_set_metadata_respond (dec->stream_decoder,
FLAC__METADATA_TYPE_PICTURE);
-#endif
}
static void
}
}
-/* FIXME: remove ifndef once we depend on flac >= 1.2.x */
-#ifndef LEGACY_FLAC
static void
gst_flac_extract_picture_buffer (GstFlacDec * dec,
const FLAC__StreamMetadata * metadata)
gst_tag_list_free (tags);
}
}
-#endif /* LEGACY_FLAC */
static void
gst_flac_dec_metadata_callback (GstFlacDec * flacdec,
}
break;
}
-
-/* FIXME: remove ifndef once we depend on flac >= 1.2.x */
-#ifndef LEGACY_FLAC
case FLAC__METADATA_TYPE_PICTURE:{
gst_flac_extract_picture_buffer (flacdec, metadata);
break;
}
-#endif
case FLAC__METADATA_TYPE_VORBIS_COMMENT:
gst_flac_dec_update_metadata (flacdec, metadata);
break;
}
}
-#ifdef LEGACY_FLAC
-static void
-gst_flac_dec_metadata_callback_seekable (const FLAC__SeekableStreamDecoder * d,
- const FLAC__StreamMetadata * metadata, void *client_data)
-{
- GstFlacDec *dec = GST_FLAC_DEC (client_data);
-
- gst_flac_dec_metadata_callback (dec, metadata);
-}
-#endif
-
static void
gst_flac_dec_metadata_callback_stream (const FLAC__StreamDecoder * decoder,
const FLAC__StreamMetadata * metadata, void *client_data)
dec->last_flow = GST_FLOW_ERROR;
}
-#ifdef LEGACY_FLAC
-static void
-gst_flac_dec_error_callback_seekable (const FLAC__SeekableStreamDecoder * d,
- FLAC__StreamDecoderErrorStatus status, void *client_data)
-{
- gst_flac_dec_error_callback (GST_FLAC_DEC (client_data), status);
-}
-#endif
-
static void
gst_flac_dec_error_callback_stream (const FLAC__StreamDecoder * d,
FLAC__StreamDecoderErrorStatus status, void *client_data)
gst_flac_dec_error_callback (GST_FLAC_DEC (client_data), status);
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamDecoderSeekStatus
-gst_flac_dec_seek (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 position, void *client_data)
-#else
static FLAC__StreamDecoderSeekStatus
gst_flac_dec_seek (const FLAC__StreamDecoder * decoder,
FLAC__uint64 position, void *client_data)
-#endif
{
GstFlacDec *flacdec;
GST_DEBUG_OBJECT (flacdec, "seek %" G_GINT64_FORMAT, position);
flacdec->offset = position;
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK;
-#else
return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
-#endif
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamDecoderTellStatus
-gst_flac_dec_tell (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 * position, void *client_data)
-#else
static FLAC__StreamDecoderTellStatus
gst_flac_dec_tell (const FLAC__StreamDecoder * decoder,
FLAC__uint64 * position, void *client_data)
-#endif
{
GstFlacDec *flacdec;
GST_DEBUG_OBJECT (flacdec, "tell %" G_GINT64_FORMAT, *position);
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK;
-#else
return FLAC__STREAM_DECODER_TELL_STATUS_OK;
-#endif
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamDecoderLengthStatus
-gst_flac_dec_length (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__uint64 * length, void *client_data)
-#else
static FLAC__StreamDecoderLengthStatus
gst_flac_dec_length (const FLAC__StreamDecoder * decoder,
FLAC__uint64 * length, void *client_data)
-#endif
{
GstFlacDec *flacdec;
GstFormat fmt = GST_FORMAT_BYTES;
flacdec = GST_FLAC_DEC (client_data);
if (!(peer = gst_pad_get_peer (flacdec->sinkpad)))
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR;
-#else
return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR;
-#endif
+
gst_pad_query_duration (peer, &fmt, &len);
gst_object_unref (peer);
if (fmt != GST_FORMAT_BYTES || len == -1)
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR;
-#else
return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR;
-#endif
*length = len;
GST_DEBUG_OBJECT (flacdec, "encoded byte length %" G_GINT64_FORMAT, *length);
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK;
-#else
return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
-#endif
}
-#ifdef LEGACY_FLAC
-static FLAC__bool
-gst_flac_dec_eof (const FLAC__SeekableStreamDecoder * decoder,
- void *client_data)
-#else
static FLAC__bool
gst_flac_dec_eof (const FLAC__StreamDecoder * decoder, void *client_data)
-#endif
{
GstFlacDec *flacdec;
GstFormat fmt;
return ret;
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamDecoderReadStatus
-gst_flac_dec_read_seekable (const FLAC__SeekableStreamDecoder * decoder,
- FLAC__byte buffer[], unsigned *bytes, void *client_data)
-#else
static FLAC__StreamDecoderReadStatus
gst_flac_dec_read_seekable (const FLAC__StreamDecoder * decoder,
FLAC__byte buffer[], size_t * bytes, void *client_data)
-#endif
{
GstFlacDec *flacdec;
if (gst_pad_pull_range (flacdec->sinkpad, flacdec->offset, *bytes,
&buf) != GST_FLOW_OK)
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR;
-#else
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
-#endif
GST_DEBUG_OBJECT (flacdec, "Read %d bytes at %" G_GUINT64_FORMAT,
GST_BUFFER_SIZE (buf), flacdec->offset);
gst_buffer_unref (buf);
flacdec->offset += *bytes;
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK;
-#else
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
-#endif
}
-#ifdef LEGACY_FLAC
-static FLAC__StreamDecoderReadStatus
-gst_flac_dec_read_stream (const FLAC__StreamDecoder * decoder,
- FLAC__byte buffer[], unsigned *bytes, void *client_data)
-#else
static FLAC__StreamDecoderReadStatus
gst_flac_dec_read_stream (const FLAC__StreamDecoder * decoder,
FLAC__byte buffer[], size_t * bytes, void *client_data)
-#endif
{
GstFlacDec *dec = GST_FLAC_DEC (client_data);
guint len;
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
-#ifdef LEGACY_FLAC
-static FLAC__StreamDecoderWriteStatus
-gst_flac_dec_write_seekable (const FLAC__SeekableStreamDecoder * decoder,
- const FLAC__Frame * frame,
- const FLAC__int32 * const buffer[], void *client_data)
-{
- return gst_flac_dec_write (GST_FLAC_DEC (client_data), frame, buffer);
-}
-#endif
-
static FLAC__StreamDecoderWriteStatus
gst_flac_dec_write_stream (const FLAC__StreamDecoder * decoder,
const FLAC__Frame * frame,
gst_flac_dec_loop (GstPad * sinkpad)
{
GstFlacDec *flacdec;
-#ifdef LEGACY_FLAC
- FLAC__SeekableStreamDecoderState s;
-#else
FLAC__StreamDecoderState s;
FLAC__StreamDecoderInitStatus is;
-#endif
flacdec = GST_FLAC_DEC (GST_OBJECT_PARENT (sinkpad));
GST_LOG_OBJECT (flacdec, "entering loop");
if (flacdec->init) {
-#ifdef LEGACY_FLAC
- GST_DEBUG_OBJECT (flacdec, "initializing legacy decoder");
- s = FLAC__seekable_stream_decoder_init (flacdec->seekable_decoder);
- if (s != FLAC__SEEKABLE_STREAM_DECODER_OK)
- goto analyze_state;
-#else
GST_DEBUG_OBJECT (flacdec, "initializing new decoder");
is = FLAC__stream_decoder_init_stream (flacdec->seekable_decoder,
gst_flac_dec_read_seekable, gst_flac_dec_seek, gst_flac_dec_tell,
gst_flac_dec_error_callback_stream, flacdec);
if (is != FLAC__STREAM_DECODER_INIT_STATUS_OK)
goto analyze_state;
-#endif
+
/* FLAC__seekable_stream_decoder_process_metadata (flacdec->seekable_decoder); */
flacdec->init = FALSE;
}
flacdec->last_flow = GST_FLOW_OK;
GST_LOG_OBJECT (flacdec, "processing single");
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_decoder_process_single (flacdec->seekable_decoder);
-#else
FLAC__stream_decoder_process_single (flacdec->seekable_decoder);
-#endif
+
analyze_state:
GST_LOG_OBJECT (flacdec, "done processing, checking encoder state");
-#ifdef LEGACY_FLAC
- s = FLAC__seekable_stream_decoder_get_state (flacdec->seekable_decoder);
-#else
s = FLAC__stream_decoder_get_state (flacdec->seekable_decoder);
-#endif
switch (s) {
-#ifdef LEGACY_FLAC
- case FLAC__SEEKABLE_STREAM_DECODER_OK:
- case FLAC__SEEKABLE_STREAM_DECODER_SEEKING:
-#else
case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
case FLAC__STREAM_DECODER_READ_METADATA:
case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
case FLAC__STREAM_DECODER_READ_FRAME:
-#endif
{
GST_DEBUG_OBJECT (flacdec, "everything ok");
return;
}
-#ifdef LEGACY_FLAC
- case FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM:{
-#else
case FLAC__STREAM_DECODER_END_OF_STREAM:{
-#endif
GST_DEBUG_OBJECT (flacdec, "EOS");
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_decoder_reset (flacdec->seekable_decoder);
-#else
FLAC__stream_decoder_reset (flacdec->seekable_decoder);
-#endif
if ((flacdec->segment.flags & GST_SEEK_FLAG_SEGMENT) != 0) {
if (flacdec->segment.duration > 0) {
goto eos_and_pause;
}
-#ifdef LEGACY_FLAC
- case FLAC__SEEKABLE_STREAM_DECODER_MEMORY_ALLOCATION_ERROR:
- case FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR:
- case FLAC__SEEKABLE_STREAM_DECODER_READ_ERROR:
- case FLAC__SEEKABLE_STREAM_DECODER_SEEK_ERROR:
- case FLAC__SEEKABLE_STREAM_DECODER_ALREADY_INITIALIZED:
- case FLAC__SEEKABLE_STREAM_DECODER_INVALID_CALLBACK:
- case FLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED:
-#else
case FLAC__STREAM_DECODER_OGG_ERROR:
case FLAC__STREAM_DECODER_SEEK_ERROR:
case FLAC__STREAM_DECODER_ABORTED:
case FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR:
case FLAC__STREAM_DECODER_UNINITIALIZED:
-#endif
default:{
/* fixme: this error sucks -- should try to figure out when/if an more
specific error was already sent via the callback */
-#ifdef LEGACY_FLAC
- GST_ELEMENT_ERROR (flacdec, STREAM, DECODE, (NULL),
- ("%s", FLAC__SeekableStreamDecoderStateString[s]));
-#else
GST_ELEMENT_ERROR (flacdec, STREAM, DECODE, (NULL),
("%s", FLAC__StreamDecoderStateString[s]));
-#endif
goto eos_and_pause;
}
}
gst_adapter_available (dec->adapter));
if (dec->init == FALSE) {
if (gst_adapter_available (dec->adapter) > 0) {
- FLAC__stream_decoder_process_until_end_of_stream (dec->
- stream_decoder);
+ FLAC__stream_decoder_process_until_end_of_stream
+ (dec->stream_decoder);
}
FLAC__stream_decoder_flush (dec->stream_decoder);
}
static GstFlowReturn
gst_flac_dec_chain (GstPad * pad, GstBuffer * buf)
{
-#ifdef LEGACY_FLAC
- FLAC__StreamDecoderState s;
-#else
FLAC__StreamDecoderInitStatus s;
-#endif
GstFlacDec *dec;
gboolean got_audio_frame;
if (dec->init) {
GST_DEBUG_OBJECT (dec, "initializing decoder");
-#ifdef LEGACY_FLAC
- s = FLAC__stream_decoder_init (dec->stream_decoder);
- if (s != FLAC__STREAM_DECODER_SEARCH_FOR_METADATA) {
- GST_ELEMENT_ERROR (GST_ELEMENT (dec), LIBRARY, INIT, (NULL), (NULL));
- return GST_FLOW_ERROR;
- }
-#else
s = FLAC__stream_decoder_init_stream (dec->stream_decoder,
gst_flac_dec_read_stream, NULL, NULL, NULL, NULL,
gst_flac_dec_write_stream, gst_flac_dec_metadata_callback_stream,
GST_ELEMENT_ERROR (GST_ELEMENT (dec), LIBRARY, INIT, (NULL), (NULL));
return GST_FLOW_ERROR;
}
-#endif
GST_DEBUG_OBJECT (dec, "initialized (framed=%d)", dec->framed);
dec->init = FALSE;
}
* callbacks that need to behave differently when seeking */
flacdec->seeking = TRUE;
- seek_ok =
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_decoder_seek_absolute (flacdec->seekable_decoder,
+ seek_ok = FLAC__stream_decoder_seek_absolute (flacdec->seekable_decoder,
flacdec->segment.last_stop);
-#else
- FLAC__stream_decoder_seek_absolute (flacdec->seekable_decoder,
- flacdec->segment.last_stop);
-#endif
flacdec->seeking = FALSE;
static GstStateChangeReturn gst_flac_enc_change_state (GstElement * element,
GstStateChange transition);
-#ifdef LEGACY_FLAC
-static FLAC__StreamEncoderWriteStatus
-gst_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * encoder,
- const FLAC__byte buffer[], unsigned bytes,
- unsigned samples, unsigned current_frame, void *client_data);
-static FLAC__SeekableStreamEncoderSeekStatus
-gst_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * encoder,
- FLAC__uint64 absolute_byte_offset, void *client_data);
-static FLAC__SeekableStreamEncoderTellStatus
-gst_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder * encoder,
- FLAC__uint64 * absolute_byte_offset, void *client_data);
-#else
static FLAC__StreamEncoderWriteStatus
gst_flac_enc_write_callback (const FLAC__StreamEncoder * encoder,
const FLAC__byte buffer[], size_t bytes,
static FLAC__StreamEncoderTellStatus
gst_flac_enc_tell_callback (const FLAC__StreamEncoder * encoder,
FLAC__uint64 * absolute_byte_offset, void *client_data);
-#endif
typedef struct
{
gst_pad_use_fixed_caps (flacenc->srcpad);
gst_element_add_pad (GST_ELEMENT (flacenc), flacenc->srcpad);
-#ifdef LEGACY_FLAC
- flacenc->encoder = FLAC__seekable_stream_encoder_new ();
-#else
flacenc->encoder = FLAC__stream_encoder_new ();
-#endif
flacenc->offset = 0;
flacenc->samples_written = 0;
GstFlacEnc *flacenc = GST_FLAC_ENC (object);
gst_tag_list_free (flacenc->tags);
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_delete (flacenc->encoder);
-#else
FLAC__stream_encoder_delete (flacenc->encoder);
-#endif
G_OBJECT_CLASS (parent_class)->finalize (object);
}
FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT);
gst_tag_list_foreach (copy, add_one_tag, flacenc);
-#ifdef LEGACY_FLAC
- if (FLAC__seekable_stream_encoder_set_metadata (flacenc->encoder,
- flacenc->meta, 1) != true)
-#else
if (FLAC__stream_encoder_set_metadata (flacenc->encoder,
flacenc->meta, 1) != true)
-#endif
+
g_warning ("Dude, i'm already initialized!");
gst_tag_list_free (copy);
}
GstFlacEnc *flacenc;
GstStructure *structure;
guint64 total_samples = GST_CLOCK_TIME_NONE;
-
-#ifdef LEGACY_FLAC
- FLAC__SeekableStreamEncoderState state;
-#else
FLAC__StreamEncoderInitStatus init_status;
-#endif
gint depth, chans, rate, width;
flacenc = GST_FLAC_ENC (gst_pad_get_parent (pad));
-#ifdef LEGACY_FLAC
- if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) !=
- FLAC__SEEKABLE_STREAM_ENCODER_UNINITIALIZED)
-#else
if (FLAC__stream_encoder_get_state (flacenc->encoder) !=
FLAC__STREAM_ENCODER_UNINITIALIZED)
-#endif
-
goto encoder_already_initialized;
structure = gst_caps_get_structure (caps, 0);
total_samples = gst_flac_enc_query_peer_total_samples (flacenc, pad);
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_bits_per_sample (flacenc->encoder,
- flacenc->depth);
- FLAC__seekable_stream_encoder_set_sample_rate (flacenc->encoder,
- flacenc->sample_rate);
- FLAC__seekable_stream_encoder_set_channels (flacenc->encoder,
- flacenc->channels);
-
- if (total_samples != GST_CLOCK_TIME_NONE)
- FLAC__seekable_stream_encoder_set_total_samples_estimate (flacenc->encoder,
- total_samples);
-
- FLAC__seekable_stream_encoder_set_write_callback (flacenc->encoder,
- gst_flac_enc_write_callback);
- FLAC__seekable_stream_encoder_set_seek_callback (flacenc->encoder,
- gst_flac_enc_seek_callback);
- FLAC__seekable_stream_encoder_set_tell_callback (flacenc->encoder,
- gst_flac_enc_tell_callback);
-
- FLAC__seekable_stream_encoder_set_client_data (flacenc->encoder, flacenc);
-#else
FLAC__stream_encoder_set_bits_per_sample (flacenc->encoder, flacenc->depth);
FLAC__stream_encoder_set_sample_rate (flacenc->encoder, flacenc->sample_rate);
FLAC__stream_encoder_set_channels (flacenc->encoder, flacenc->channels);
if (total_samples != GST_CLOCK_TIME_NONE)
FLAC__stream_encoder_set_total_samples_estimate (flacenc->encoder,
total_samples);
-#endif
gst_flac_enc_set_metadata (flacenc);
-#ifdef LEGACY_FLAC
- state = FLAC__seekable_stream_encoder_init (flacenc->encoder);
- if (state != FLAC__STREAM_ENCODER_OK)
- goto failed_to_initialize;
-#else
init_status = FLAC__stream_encoder_init_stream (flacenc->encoder,
gst_flac_enc_write_callback, gst_flac_enc_seek_callback,
gst_flac_enc_tell_callback, NULL, flacenc);
if (init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK)
goto failed_to_initialize;
-#endif
gst_object_unref (flacenc);
{
flacenc->quality = quality;
-#ifdef LEGACY_FLAC
-#define DO_UPDATE(name, val, str) \
- G_STMT_START { \
- if (FLAC__seekable_stream_encoder_get_##name (flacenc->encoder) != \
- flacenc_params[quality].val) { \
- FLAC__seekable_stream_encoder_set_##name (flacenc->encoder, \
- flacenc_params[quality].val); \
- g_object_notify (G_OBJECT (flacenc), str); \
- } \
- } G_STMT_END
-
-#else
#define DO_UPDATE(name, val, str) \
G_STMT_START { \
if (FLAC__stream_encoder_get_##name (flacenc->encoder) != \
} \
} G_STMT_END
-#endif
-
g_object_freeze_notify (G_OBJECT (flacenc));
if (flacenc->channels == 2 || flacenc->channels == 0) {
return TRUE;
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamEncoderSeekStatus
-gst_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * encoder,
- FLAC__uint64 absolute_byte_offset, void *client_data)
-#else
static FLAC__StreamEncoderSeekStatus
gst_flac_enc_seek_callback (const FLAC__StreamEncoder * encoder,
FLAC__uint64 absolute_byte_offset, void *client_data)
-#endif
{
GstFlacEnc *flacenc;
GstEvent *event;
flacenc = GST_FLAC_ENC (client_data);
if (flacenc->stopped)
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK;
-#else
return FLAC__STREAM_ENCODER_SEEK_STATUS_OK;
-#endif
+
event = gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_BYTES,
absolute_byte_offset, GST_BUFFER_OFFSET_NONE, 0);
} else {
GST_DEBUG ("Seek to %" G_GUINT64_FORMAT " %s", absolute_byte_offset,
"failed");
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR;
-#else
return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED;
-#endif
-
}
} else {
GST_DEBUG ("Seek to %" G_GUINT64_FORMAT " failed (no peer pad)",
}
flacenc->offset = absolute_byte_offset;
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK;
-#else
return FLAC__STREAM_ENCODER_SEEK_STATUS_OK;
-#endif
}
static void
gst_caps_unref (caps);
}
-#ifdef LEGACY_FLAC
-static FLAC__StreamEncoderWriteStatus
-gst_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * encoder,
- const FLAC__byte buffer[], unsigned bytes,
- unsigned samples, unsigned current_frame, void *client_data)
-#else
static FLAC__StreamEncoderWriteStatus
gst_flac_enc_write_callback (const FLAC__StreamEncoder * encoder,
const FLAC__byte buffer[], size_t bytes,
unsigned samples, unsigned current_frame, void *client_data)
-#endif
{
GstFlowReturn ret = GST_FLOW_OK;
GstFlacEnc *flacenc;
return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
}
-#ifdef LEGACY_FLAC
-static FLAC__SeekableStreamEncoderTellStatus
-gst_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder * encoder,
- FLAC__uint64 * absolute_byte_offset, void *client_data)
-#else
static FLAC__StreamEncoderTellStatus
gst_flac_enc_tell_callback (const FLAC__StreamEncoder * encoder,
FLAC__uint64 * absolute_byte_offset, void *client_data)
-#endif
{
GstFlacEnc *flacenc = GST_FLAC_ENC (client_data);
*absolute_byte_offset = flacenc->offset;
-#ifdef LEGACY_FLAC
- return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK;
-#else
return FLAC__STREAM_ENCODER_TELL_STATUS_OK;
-#endif
}
static gboolean
break;
}
case GST_EVENT_EOS:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_finish (flacenc->encoder);
-#else
FLAC__stream_encoder_finish (flacenc->encoder);
-#endif
ret = gst_pad_event_default (pad, event);
break;
case GST_EVENT_TAG:
gst_buffer_unref (buffer);
-#ifdef LEGACY_FLAC
- res = FLAC__seekable_stream_encoder_process_interleaved (flacenc->encoder,
- (const FLAC__int32 *) data, samples / flacenc->channels);
-#else
res = FLAC__stream_encoder_process_interleaved (flacenc->encoder,
(const FLAC__int32 *) data, samples / flacenc->channels);
-#endif
g_free (data);
gst_flac_enc_update_quality (this, g_value_get_enum (value));
break;
case PROP_STREAMABLE_SUBSET:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_streamable_subset (this->encoder,
- g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_streamable_subset (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_MID_SIDE_STEREO:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_do_mid_side_stereo (this->encoder,
- g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_do_mid_side_stereo (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_LOOSE_MID_SIDE_STEREO:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_loose_mid_side_stereo (this->encoder,
- g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_loose_mid_side_stereo (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_BLOCKSIZE:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_blocksize (this->encoder,
- g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_blocksize (this->encoder,
g_value_get_uint (value));
-#endif
break;
case PROP_MAX_LPC_ORDER:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_max_lpc_order (this->encoder,
- g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_max_lpc_order (this->encoder,
g_value_get_uint (value));
-#endif
break;
case PROP_QLP_COEFF_PRECISION:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_qlp_coeff_precision (this->encoder,
- g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_qlp_coeff_precision (this->encoder,
g_value_get_uint (value));
-#endif
break;
case PROP_QLP_COEFF_PREC_SEARCH:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search (this->encoder,
- g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_do_qlp_coeff_prec_search (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_ESCAPE_CODING:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_do_escape_coding (this->encoder,
- g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_do_escape_coding (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_EXHAUSTIVE_MODEL_SEARCH:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_do_exhaustive_model_search
- (this->encoder, g_value_get_boolean (value));
-#else
FLAC__stream_encoder_set_do_exhaustive_model_search (this->encoder,
g_value_get_boolean (value));
-#endif
break;
case PROP_MIN_RESIDUAL_PARTITION_ORDER:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_min_residual_partition_order
- (this->encoder, g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_min_residual_partition_order (this->encoder,
g_value_get_uint (value));
-#endif
break;
case PROP_MAX_RESIDUAL_PARTITION_ORDER:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_max_residual_partition_order
- (this->encoder, g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_max_residual_partition_order (this->encoder,
g_value_get_uint (value));
-#endif
break;
case PROP_RICE_PARAMETER_SEARCH_DIST:
-#ifdef LEGACY_FLAC
- FLAC__seekable_stream_encoder_set_rice_parameter_search_dist
- (this->encoder, g_value_get_uint (value));
-#else
FLAC__stream_encoder_set_rice_parameter_search_dist (this->encoder,
g_value_get_uint (value));
-#endif
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
g_value_set_enum (value, this->quality);
break;
case PROP_STREAMABLE_SUBSET:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_streamable_subset (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_streamable_subset (this->encoder));
-#endif
break;
case PROP_MID_SIDE_STEREO:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_do_mid_side_stereo (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_do_mid_side_stereo (this->encoder));
-#endif
break;
case PROP_LOOSE_MID_SIDE_STEREO:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_loose_mid_side_stereo
- (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_loose_mid_side_stereo (this->encoder));
-#endif
break;
case PROP_BLOCKSIZE:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_blocksize (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_blocksize (this->encoder));
-#endif
break;
case PROP_MAX_LPC_ORDER:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_max_lpc_order (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_max_lpc_order (this->encoder));
-#endif
break;
case PROP_QLP_COEFF_PRECISION:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_qlp_coeff_precision
- (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_qlp_coeff_precision (this->encoder));
-#endif
break;
case PROP_QLP_COEFF_PREC_SEARCH:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search
- (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_do_qlp_coeff_prec_search (this->encoder));
-#endif
break;
case PROP_ESCAPE_CODING:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_do_escape_coding (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_do_escape_coding (this->encoder));
-#endif
break;
case PROP_EXHAUSTIVE_MODEL_SEARCH:
-#ifdef LEGACY_FLAC
- g_value_set_boolean (value,
- FLAC__seekable_stream_encoder_get_do_exhaustive_model_search
- (this->encoder));
-#else
g_value_set_boolean (value,
FLAC__stream_encoder_get_do_exhaustive_model_search (this->encoder));
-#endif
break;
case PROP_MIN_RESIDUAL_PARTITION_ORDER:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_min_residual_partition_order
- (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_min_residual_partition_order
(this->encoder));
-#endif
break;
case PROP_MAX_RESIDUAL_PARTITION_ORDER:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_max_residual_partition_order
- (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_max_residual_partition_order
(this->encoder));
-#endif
break;
case PROP_RICE_PARAMETER_SEARCH_DIST:
-#ifdef LEGACY_FLAC
- g_value_set_uint (value,
- FLAC__seekable_stream_encoder_get_rice_parameter_search_dist
- (this->encoder));
-#else
g_value_set_uint (value,
FLAC__stream_encoder_get_rice_parameter_search_dist (this->encoder));
-#endif
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
-#ifdef LEGACY_FLAC
- if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) !=
- FLAC__STREAM_ENCODER_UNINITIALIZED) {
- flacenc->stopped = TRUE;
- FLAC__seekable_stream_encoder_finish (flacenc->encoder);
- }
-#else
if (FLAC__stream_encoder_get_state (flacenc->encoder) !=
FLAC__STREAM_ENCODER_UNINITIALIZED) {
flacenc->stopped = TRUE;
FLAC__stream_encoder_finish (flacenc->encoder);
}
-#endif
flacenc->offset = 0;
flacenc->samples_written = 0;
flacenc->channels = 0;