|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
copyright 2009-2011 by Malcolm Boczek - free software under the terms of the LGPL 2.1
|
|
Packit |
c32a2d |
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
All rights to this work freely assigned to the mpg123 project.
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
libmpg123: MPEG Audio Decoder library
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
Packit |
c32a2d |
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
1.8.1.0 04-Aug-09 Initial release.
|
|
Packit |
c32a2d |
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
|
|
Packit |
c32a2d |
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
|
|
Packit |
c32a2d |
1.13.0.0 13-Jan-11 release match - added strlen (mb)
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include "StdAfx.h"
|
|
Packit |
c32a2d |
#include "string.h"
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// Constructor for overlaid instance (instanced)
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::mpg123str(void)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
instanced = true;
|
|
Packit |
c32a2d |
sb = new ::mpg123_string;
|
|
Packit |
c32a2d |
mpg123_init_string();
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// Constructor for mpg123_string handle instance (referenced)
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::mpg123str(mpg123_string* sb)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
instanced = false;
|
|
Packit |
c32a2d |
this->sb = sb;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::mpg123str(const char* str)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
instanced = true;
|
|
Packit |
c32a2d |
sb = new ::mpg123_string;
|
|
Packit |
c32a2d |
mpg123_init_string();
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
::mpg123_set_string(sb, str);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// Destructor cleans up all resources
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::~mpg123str(void)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// clean up code to release managed resources
|
|
Packit |
c32a2d |
// ...
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// call Finalizer to clean up unmanaged resources
|
|
Packit |
c32a2d |
this->!mpg123str();
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// Finalizer cleans up unmanaged resources
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::!mpg123str(void)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
if (instanced && (sb != nullptr)) mpg123_free_string();
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_add_string(String ^ s)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return mpg123_add_substring(s, 0, s->Length);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_add_substring(String ^ s, int from, int count)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// convert CLR string to CLI string
|
|
Packit |
c32a2d |
using namespace Runtime::InteropServices;
|
|
Packit |
c32a2d |
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s->Substring(from, count))).ToPointer();
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// add mpg123_string info
|
|
Packit |
c32a2d |
int ret = ::mpg123_add_string(sb, chars);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// free temporary memory
|
|
Packit |
c32a2d |
Marshal::FreeHGlobal(IntPtr((void*)chars));
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_copy_string(mpg123str^ to)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return ::mpg123_copy_string(sb, to->sb);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
void mpg123clr::mpg123str::mpg123_free_string()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
::mpg123_free_string(sb);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_grow_string(int newSize)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return ::mpg123_grow_string(sb, newSize);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_resize_string(int newSize)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return ::mpg123_resize_string(sb, newSize);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
void mpg123clr::mpg123str::mpg123_init_string()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
::mpg123_init_string(sb);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_set_string(String ^ s)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return mpg123_set_substring(s, 0, s->Length);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_set_substring(String ^ s, int from, int count)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// convert CLR string to CLI string
|
|
Packit |
c32a2d |
using namespace Runtime::InteropServices;
|
|
Packit |
c32a2d |
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s->Substring(from, count))).ToPointer();
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// set mpg123_string info
|
|
Packit |
c32a2d |
int ret = ::mpg123_set_string(sb, chars);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// free temporary memory
|
|
Packit |
c32a2d |
Marshal::FreeHGlobal(IntPtr((void*)chars));
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
long long mpg123clr::mpg123str::mpg123_strlen(bool utf8)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// TODO: determine use for utf8 vs ansi
|
|
Packit |
c32a2d |
return ::mpg123_strlen(sb, utf8);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::Fill::get()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
|
|
Packit |
c32a2d |
return (int)sb->fill;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::Size::get()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
|
|
Packit |
c32a2d |
return (int)sb->size;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
String^ mpg123clr::mpg123str::Text::get()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
if (sb->fill == 0) return gcnew String("");
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
|
|
Packit |
c32a2d |
return Marshal::PtrToStringAnsi((IntPtr)sb->p, (int)strnlen(sb->p, sb->fill));
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123clr::mpg123str::text_encoding mpg123clr::mpg123str::mpg123_enc_from_id3(unsigned char id3_enc_byte)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return (mpg123clr::mpg123str::text_encoding) ::mpg123_enc_from_id3(id3_enc_byte);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int mpg123clr::mpg123str::mpg123_store_utf8(text_encoding enc, const unsigned char *source, size_t source_size)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return ::mpg123_store_utf8(sb, (mpg123_text_encoding)enc, source, source_size);
|
|
Packit |
c32a2d |
}
|