📄 tak_lib_cpp.h
字号:
#pragma once
/**
* \file tak_lib_cpp.h
* High-level TAK decoder wrapper for use with foobar2000.
* \author Holger Stenger
*/
#include "taklibxx.h"
using namespace taklibxx;
namespace tak_lib_cpp
{
class tak_stream_interface_impl_file
{
private:
static TtakStreamIoInterface g_io_interface;
static TtakBool CanRead(void * AUser);
static TtakBool CanWrite(void * AUser);
static TtakBool CanSeek(void * AUser);
static TtakBool Read(void * AUser, void * ABuf, TtakInt32 ANum, TtakInt32 * AReadNum);
static TtakBool Write(void * AUser, const void * ABuf, TtakInt32 ANum);
static TtakBool Flush(void * AUser);
static TtakBool Truncate(void * AUser);
static TtakBool Seek(void * AUser, TtakInt64 APos);
static TtakBool GetLength(void * AUser, TtakInt64 * ALength);
service_ptr_t<file> m_file;
public:
static TtakStreamIoInterface * g_get_io_interface_ptr();
tak_stream_interface_impl_file(service_ptr_t<file> p_file);
~tak_stream_interface_impl_file();
};
extern __declspec(selectany) char const INNER[] = "raw";
extern __declspec(selectany) char const OUTER[] = "wrapper";
class tak_seekable_decoder
{
private:
//typedef tak_ssd_ptr_trace<tak_ssd_ptr_raw, INNER> tak_ssd_ptr_inner;
typedef tak_ssd_ptr_trackcall<tak_ssd_ptr_raw> tak_ssd_ptr_inner;
typedef tak_ssd_ptr_eos_seek_fix<tak_ssd_ptr_inner> tak_ssd_ptr_outer;
//typedef tak_ssd_ptr_trace<tak_ssd_ptr_outer, OUTER> tak_ssd_ptr;
typedef tak_ssd_ptr_outer tak_ssd_ptr;
tak_ssd_ptr_helper<tak_ssd_ptr> m_decoder;
pfc::ptrholder_t<tak_stream_interface_impl_file> m_file_callback;
Ttak_str_StreamInfo m_info;
Ttak_str_MetaEncoderInfo m_encoder_info;
bool m_encoder_info_valid;
public:
#ifdef _DEBUG
tak_seekable_decoder(const char * p_filename);
#endif
tak_seekable_decoder(service_ptr_t<file> p_file, TtakInt32 p_cpu_opt_flags = tak_Cpu_Any);
~tak_seekable_decoder();
t_uint32 get_sample_rate();
t_uint32 get_channel_count();
t_uint64 get_sample_count();
t_uint32 get_bits_per_sample();
t_uint32 get_frame_size();
t_size decode(void * p_data, t_size p_samples);
void seek(TtakInt64 p_sample);
t_int32 get_last_frame_bitrate();
void get_info(file_info & p_info);
};
} // namespace tak_lib_cpp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -