⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tak_lib_cpp.h

📁 foo_input_tak-0.4.2-20080408-src tak文件识别代码
💻 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 + -