/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.12.0.0 14-Apr-10 Revision harmonization (catch-up)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "enum.h"
using namespace System;
namespace mpg123clr
{
// defgroup mpg123_error mpg123 error handling
//
// Functions to get text version of the error numbers and an enumeration
// of the error codes returned by libmpg123.
//
// Most functions operating on a mpg123_handle simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code).
// Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
// The positive range of return values is used for "useful" values when appropriate.
//
//
//
namespace mpg
{
///Enumeration of the message and error codes as returned by libmpg123 functions.
public enum class ErrorCode
{
done = MPG123_DONE, /// Message: Track ended.
new_format = MPG123_NEW_FORMAT, /// Message: Output format will be different on next call.
need_more = MPG123_NEED_MORE, /// Message: For feed reader: "Feed me more!"
err = MPG123_ERR, /// Generic Error
ok = MPG123_OK, /// Success
bad_outformat = MPG123_BAD_OUTFORMAT, /// Unable to set up output format!
bad_channel = MPG123_BAD_CHANNEL, /// Invalid channel number specified.
bad_rate = MPG123_BAD_RATE, /// Invalid sample rate specified.
err_16to8table = MPG123_ERR_16TO8TABLE, /// Unable to allocate memory for 16 to 8 converter table!
bad_param = MPG123_BAD_PARAM, /// Bad parameter id!
bad_buffer = MPG123_BAD_BUFFER, /// Bad buffer given -- invalid pointer or too small size.
out_of_mem = MPG123_OUT_OF_MEM, /// Out of memory -- some malloc() failed.
not_initialized = MPG123_NOT_INITIALIZED, /// You didn't initialize the library!
bad_decoder = MPG123_BAD_DECODER, /// Invalid decoder choice.
bad_handle = MPG123_BAD_HANDLE, /// Invalid mpg123 handle.
no_buffers = MPG123_NO_BUFFERS, /// Unable to initialize frame buffers (out of memory?).
bad_rva = MPG123_BAD_RVA, /// Invalid RVA mode.
no_gapless = MPG123_NO_GAPLESS, /// This build doesn't support gapless decoding.
no_space = MPG123_NO_SPACE, /// Not enough buffer space.
bad_types = MPG123_BAD_TYPES, /// Incompatible numeric data types.
bad_band = MPG123_BAD_BAND, /// Bad equalizer band.
err_null = MPG123_ERR_NULL, /// Null pointer given where valid storage address needed.
err_reader = MPG123_ERR_READER, /// Error reading the stream.
no_seek_from_end = MPG123_NO_SEEK_FROM_END, /// Cannot seek from end (end is not known).
bad_whence = MPG123_BAD_WHENCE, /// Invalid 'whence' for seek function.
no_timeout = MPG123_NO_TIMEOUT, /// Build does not support stream timeouts.
bad_file = MPG123_BAD_FILE, /// File access error.
no_seek = MPG123_NO_SEEK, /// Seek not supported by stream.
no_reader = MPG123_NO_READER, /// No stream opened.
bad_pars = MPG123_BAD_PARS, /// Bad parameter handle.
bad_index_par = MPG123_BAD_INDEX_PAR, /// Bad parameters to mpg123_index()
out_of_sync = MPG123_OUT_OF_SYNC, /// Lost track in bytestream and did not try to resync.
resync_fail = MPG123_RESYNC_FAIL, /// Resync failed to find valid MPEG data.
no_8bit = MPG123_NO_8BIT, /// No 8bit encoding possible.
bad_align = MPG123_BAD_ALIGN, /// Stack aligmnent error
null_buffer = MPG123_NULL_BUFFER, /// NULL input buffer with non-zero size...
no_relseek = MPG123_NO_RELSEEK, /// Relative seek not possible (screwed up file offset)
null_pointer = MPG123_NULL_POINTER, /// You gave a null pointer somewhere where you shouldn't have.
bad_key = MPG123_BAD_KEY, /// Bad key value given.
no_index = MPG123_NO_INDEX, /// No frame index in this build.
index_fail = MPG123_INDEX_FAIL, /// Something with frame index went wrong.
bad_decoder_setup = MPG123_BAD_DECODER_SETUP, /// Something prevents a proper decoder setup
missing_feature = MPG123_MISSING_FEATURE, /// This feature has not been built into libmpg123.
/* 1.8.1 */
bad_value = MPG123_BAD_VALUE, /// A bad value has been given, somewhere.
lseek_failed = MPG123_LSEEK_FAILED, /// Low-level seek failed.
/* 1.12.0 */
bad_custom_io = MPG123_BAD_CUSTOM_IO, /// Custom I/O not prepared.
lfs_overflow = MPG123_LFS_OVERFLOW, /// Offset value overflow during translation of large file API calls,
/// - your client program cannot handle that large file.
};
}
///Wrapper for mpg123_errors
public ref class mpg123error
{
protected:
///Finalizer.
///Cleanly handles mpg123_delete of internal (unmanaged) handles.
/// Implementation of CLR Finalize().
!mpg123error(void);
public:
///Constructor.
mpg123error(void);
///Destructor. Used for final object deletion.
///Calls finalizer for clean disposal of internal (unmanaged) library handles.
///
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123error(void);
///Obtain a string description of the errcode meaning.
///Returns a String description representing the error code.
///
///The error code to be described.
///Returns a String description representing the error code.
static String^ __clrcall mpg123_plain_strerror(mpg123clr::mpg::ErrorCode errcode);
};
}