new funcs for getting underlying decoder layer states
authorJosh Coalson <jcoalson@users.sourceforce.net>
Thu, 1 Aug 2002 07:28:03 +0000 (07:28 +0000)
committerJosh Coalson <jcoalson@users.sourceforce.net>
Thu, 1 Aug 2002 07:28:03 +0000 (07:28 +0000)
include/FLAC/file_decoder.h
include/FLAC/seekable_stream_decoder.h
src/libFLAC/file_decoder.c
src/libFLAC/seekable_stream_decoder.c
src/test_libFLAC/decoders.c

index c43209a..973436c 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef FLAC__FILE_DECODER_H
 #define FLAC__FILE_DECODER_H
 
-#include "stream_decoder.h"
+#include "seekable_stream_decoder.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -389,6 +389,31 @@ FLAC__bool FLAC__file_decoder_set_metadata_ignore_all(FLAC__FileDecoder *decoder
  */
 FLAC__FileDecoderState FLAC__file_decoder_get_state(const FLAC__FileDecoder *decoder);
 
+/** Get the state of the underlying seekable stream decoder.
+ *  Useful when the file decoder state is
+ *  \c FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR.
+ *
+ * \param  decoder  An decoder instance to query.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__SeekableStreamDecoderState
+ *    The seekable stream decoder state.
+ */
+FLAC__SeekableStreamDecoderState FLAC__file_decoder_get_seekable_stream_decoder_state(const FLAC__FileDecoder *decoder);
+
+/** Get the state of the underlying stream decoder.
+ *  Useful when the file decoder state is
+ *  \c FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR and the seekable stream
+ *  decoder state is \c FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR.
+ *
+ * \param  decoder  An decoder instance to query.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__SeekableStreamDecoderState
+ *    The seekable stream decoder state.
+ */
+FLAC__StreamDecoderState FLAC__file_decoder_get_stream_decoder_state(const FLAC__FileDecoder *decoder);
+
 /** Get the "MD5 signature checking" flag.
  *  This is inherited from FLAC__SeekableStreamDecoder; see
  *  FLAC__seekable_stream_decoder_get_md5_checking().
index 26c5bc9..fa8bf0a 100644 (file)
@@ -570,6 +570,18 @@ FLAC__bool FLAC__seekable_stream_decoder_set_metadata_ignore_all(FLAC__SeekableS
  */
 FLAC__SeekableStreamDecoderState FLAC__seekable_stream_decoder_get_state(const FLAC__SeekableStreamDecoder *decoder);
 
+/** Get the state of the underlying stream decoder.
+ *  Useful when the seekable stream decoder state is
+ *  \c FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR.
+ *
+ * \param  decoder  An decoder instance to query.
+ * \assert
+ *    \code decoder != NULL \endcode
+ * \retval FLAC__StreamDecoderState
+ *    The stream decoder state.
+ */
+FLAC__StreamDecoderState FLAC__seekable_stream_decoder_get_stream_decoder_state(const FLAC__SeekableStreamDecoder *decoder);
+
 /** Get the "MD5 signature checking" flag.
  *  This is the value of the setting, not whether or not the decoder is
  *  currently checking the MD5 (remember, it can be turned off automatically
index f50751d..4eede20 100644 (file)
@@ -362,6 +362,20 @@ FLAC__FileDecoderState FLAC__file_decoder_get_state(const FLAC__FileDecoder *dec
        return decoder->protected_->state;
 }
 
+FLAC__SeekableStreamDecoderState FLAC__file_decoder_get_seekable_stream_decoder_state(const FLAC__FileDecoder *decoder)
+{
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_state(decoder->private_->seekable_stream_decoder);
+}
+
+FLAC__StreamDecoderState FLAC__file_decoder_get_stream_decoder_state(const FLAC__FileDecoder *decoder)
+{
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_stream_decoder_state(decoder->private_->seekable_stream_decoder);
+}
+
 FLAC__bool FLAC__file_decoder_get_md5_checking(const FLAC__FileDecoder *decoder)
 {
        FLAC__ASSERT(0 != decoder);
@@ -371,37 +385,37 @@ FLAC__bool FLAC__file_decoder_get_md5_checking(const FLAC__FileDecoder *decoder)
 
 unsigned FLAC__file_decoder_get_channels(const FLAC__FileDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__seekable_stream_decoder_get_channels(decoder->private_->seekable_stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_channels(decoder->private_->seekable_stream_decoder);
 }
 
 FLAC__ChannelAssignment FLAC__file_decoder_get_channel_assignment(const FLAC__FileDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__seekable_stream_decoder_get_channel_assignment(decoder->private_->seekable_stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_channel_assignment(decoder->private_->seekable_stream_decoder);
 }
 
 unsigned FLAC__file_decoder_get_bits_per_sample(const FLAC__FileDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__seekable_stream_decoder_get_bits_per_sample(decoder->private_->seekable_stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_bits_per_sample(decoder->private_->seekable_stream_decoder);
 }
 
 unsigned FLAC__file_decoder_get_sample_rate(const FLAC__FileDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__seekable_stream_decoder_get_sample_rate(decoder->private_->seekable_stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_sample_rate(decoder->private_->seekable_stream_decoder);
 }
 
 unsigned FLAC__file_decoder_get_blocksize(const FLAC__FileDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__seekable_stream_decoder_get_blocksize(decoder->private_->seekable_stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__seekable_stream_decoder_get_blocksize(decoder->private_->seekable_stream_decoder);
 }
 
 FLAC__bool FLAC__file_decoder_process_whole_file(FLAC__FileDecoder *decoder)
@@ -504,6 +518,7 @@ FLAC__bool FLAC__file_decoder_seek_absolute(FLAC__FileDecoder *decoder, FLAC__ui
        }
 }
 
+
 /***********************************************************************
  *
  * Private class methods
@@ -512,6 +527,9 @@ FLAC__bool FLAC__file_decoder_seek_absolute(FLAC__FileDecoder *decoder, FLAC__ui
 
 void set_defaults_(FLAC__FileDecoder *decoder)
 {
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+
        decoder->private_->filename = 0;
        decoder->private_->write_callback = 0;
        decoder->private_->metadata_callback = 0;
index 02c60d3..3339a20 100644 (file)
@@ -83,9 +83,9 @@ const char * const FLAC__SeekableStreamDecoderStateString[] = {
        "FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR",
        "FLAC__SEEKABLE_STREAM_DECODER_READ_ERROR",
        "FLAC__SEEKABLE_STREAM_DECODER_SEEK_ERROR",
-    "FLAC__SEEKABLE_STREAM_DECODER_ALREADY_INITIALIZED",
-    "FLAC__SEEKABLE_STREAM_DECODER_INVALID_CALLBACK",
-    "FLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED"
+       "FLAC__SEEKABLE_STREAM_DECODER_ALREADY_INITIALIZED",
+       "FLAC__SEEKABLE_STREAM_DECODER_INVALID_CALLBACK",
+       "FLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED"
 };
 
 const char * const FLAC__SeekableStreamDecoderReadStatusString[] = {
@@ -108,6 +108,7 @@ const char * const FLAC__SeekableStreamDecoderLengthStatusString[] = {
        "FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR"
 };
 
+
 /***********************************************************************
  *
  * Class constructor/destructor
@@ -444,6 +445,13 @@ FLAC__SeekableStreamDecoderState FLAC__seekable_stream_decoder_get_state(const F
        return decoder->protected_->state;
 }
 
+FLAC__SeekableStreamDecoderState FLAC__seekable_stream_decoder_get_stream_decoder_state(const FLAC__SeekableStreamDecoder *decoder)
+{
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_state(decoder->private_->stream_decoder);
+}
+
 FLAC__bool FLAC__seekable_stream_decoder_get_md5_checking(const FLAC__SeekableStreamDecoder *decoder)
 {
        FLAC__ASSERT(0 != decoder);
@@ -453,37 +461,37 @@ FLAC__bool FLAC__seekable_stream_decoder_get_md5_checking(const FLAC__SeekableSt
 
 unsigned FLAC__seekable_stream_decoder_get_channels(const FLAC__SeekableStreamDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__stream_decoder_get_channels(decoder->private_->stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_channels(decoder->private_->stream_decoder);
 }
 
 FLAC__ChannelAssignment FLAC__seekable_stream_decoder_get_channel_assignment(const FLAC__SeekableStreamDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__stream_decoder_get_channel_assignment(decoder->private_->stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_channel_assignment(decoder->private_->stream_decoder);
 }
 
 unsigned FLAC__seekable_stream_decoder_get_bits_per_sample(const FLAC__SeekableStreamDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__stream_decoder_get_bits_per_sample(decoder->private_->stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_bits_per_sample(decoder->private_->stream_decoder);
 }
 
 unsigned FLAC__seekable_stream_decoder_get_sample_rate(const FLAC__SeekableStreamDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__stream_decoder_get_sample_rate(decoder->private_->stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_sample_rate(decoder->private_->stream_decoder);
 }
 
 unsigned FLAC__seekable_stream_decoder_get_blocksize(const FLAC__SeekableStreamDecoder *decoder)
 {
-    FLAC__ASSERT(0 != decoder);
-    FLAC__ASSERT(0 != decoder->private_);
-    return FLAC__stream_decoder_get_blocksize(decoder->private_->stream_decoder);
+       FLAC__ASSERT(0 != decoder);
+       FLAC__ASSERT(0 != decoder->private_);
+       return FLAC__stream_decoder_get_blocksize(decoder->private_->stream_decoder);
 }
 
 FLAC__bool FLAC__seekable_stream_decoder_flush(FLAC__SeekableStreamDecoder *decoder)
index 024cdf5..3e460bf 100644 (file)
@@ -996,6 +996,7 @@ static FLAC__bool test_seekable_stream_decoder()
 {
        FLAC__SeekableStreamDecoder *decoder;
        FLAC__SeekableStreamDecoderState state;
+       FLAC__StreamDecoderState sstate;
        seekable_stream_decoder_client_data_struct decoder_client_data;
 
        printf("\n+++ libFLAC unit test: FLAC__SeekableStreamDecoder\n\n");
@@ -1099,6 +1100,10 @@ static FLAC__bool test_seekable_stream_decoder()
        state = FLAC__seekable_stream_decoder_get_state(decoder);
        printf("returned state = %u (%s)... OK\n", state, FLAC__SeekableStreamDecoderStateString[state]);
 
+       printf("testing FLAC__seekable_stream_decoder_get_stream_decoder_state()... ");
+       sstate = FLAC__seekable_stream_decoder_get_stream_decoder_state(decoder);
+       printf("returned state = %u (%s)... OK\n", sstate, FLAC__StreamDecoderStateString[sstate]);
+
        decoder_client_data.current_metadata_number = 0;
        decoder_client_data.ignore_errors = false;
        decoder_client_data.error_occurred = false;
@@ -1571,6 +1576,8 @@ static FLAC__bool test_file_decoder()
 {
        FLAC__FileDecoder *decoder;
        FLAC__FileDecoderState state;
+       FLAC__SeekableStreamDecoderState ssstate;
+       FLAC__StreamDecoderState sstate;
        seekable_stream_decoder_client_data_struct decoder_client_data;
 
        printf("\n+++ libFLAC unit test: FLAC__FileDecoder\n\n");
@@ -1654,6 +1661,14 @@ static FLAC__bool test_file_decoder()
        state = FLAC__file_decoder_get_state(decoder);
        printf("returned state = %u (%s)... OK\n", state, FLAC__FileDecoderStateString[state]);
 
+       printf("testing FLAC__file_decoder_get_seekable_stream_decoder_state()... ");
+       ssstate = FLAC__file_decoder_get_seekable_stream_decoder_state(decoder);
+       printf("returned state = %u (%s)... OK\n", ssstate, FLAC__SeekableStreamDecoderStateString[ssstate]);
+
+       printf("testing FLAC__file_decoder_get_stream_decoder_state()... ");
+       sstate = FLAC__file_decoder_get_stream_decoder_state(decoder);
+       printf("returned state = %u (%s)... OK\n", sstate, FLAC__StreamDecoderStateString[sstate]);
+
        decoder_client_data.current_metadata_number = 0;
        decoder_client_data.ignore_errors = false;
        decoder_client_data.error_occurred = false;