File indexing completed on 2024-05-12 04:06:03
0001 /* 0002 SPDX-FileCopyrightText: 2019 Alexander Potashev <aspotashev@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #include "virtualfileqt-openal.h" 0008 0009 VirtualFileQt::VirtualFileQt(const QString &path) 0010 : m_file(path) 0011 { 0012 } 0013 0014 bool VirtualFileQt::open() 0015 { 0016 return m_file.open(QIODevice::ReadOnly); 0017 } 0018 0019 int64_t VirtualFileQt::getFileLen() const 0020 { 0021 return static_cast<int64_t>(m_file.size()); 0022 } 0023 0024 int64_t VirtualFileQt::seek(int64_t offset, int whence) 0025 { 0026 switch (whence) { 0027 case SEEK_SET: 0028 return m_file.seek(static_cast<quint64>(offset)) ? m_file.pos() : -1; 0029 case SEEK_CUR: 0030 return m_file.seek(m_file.pos() + static_cast<quint64>(offset)) ? m_file.pos() : -1; 0031 case SEEK_END: 0032 return m_file.seek(m_file.size() + static_cast<quint64>(offset)) ? m_file.pos() : -1; 0033 default: 0034 return -1; 0035 } 0036 } 0037 0038 int64_t VirtualFileQt::read(void *ptr, int64_t count) 0039 { 0040 return static_cast<int64_t>(m_file.read(static_cast<char *>(ptr), static_cast<qint64>(count))); 0041 } 0042 0043 int64_t VirtualFileQt::write(const void *, int64_t) 0044 { 0045 // Writing is not supported. 0046 return 0; 0047 } 0048 0049 int64_t VirtualFileQt::tell() 0050 { 0051 return static_cast<int64_t>(m_file.pos()); 0052 } 0053 0054 sf_count_t sf_get_filelen(void *user_data) 0055 { 0056 return static_cast<sf_count_t>(VirtualFileQt::get(user_data)->getFileLen()); 0057 } 0058 0059 sf_count_t sf_seek(sf_count_t offset, int whence, void *user_data) 0060 { 0061 return static_cast<sf_count_t>(VirtualFileQt::get(user_data)->seek(static_cast<int64_t>(offset), whence)); 0062 } 0063 0064 sf_count_t sf_read(void *ptr, sf_count_t count, void *user_data) 0065 { 0066 return static_cast<sf_count_t>(VirtualFileQt::get(user_data)->read(ptr, static_cast<int64_t>(count))); 0067 } 0068 0069 sf_count_t sf_write(const void *ptr, sf_count_t count, void *user_data) 0070 { 0071 return static_cast<sf_count_t>(VirtualFileQt::get(user_data)->write(ptr, static_cast<int64_t>(count))); 0072 } 0073 0074 sf_count_t sf_tell(void *user_data) 0075 { 0076 return static_cast<sf_count_t>(VirtualFileQt::get(user_data)->tell()); 0077 } 0078 0079 SF_VIRTUAL_IO sfVirtualIO = { 0080 sf_get_filelen, 0081 sf_seek, 0082 sf_read, 0083 sf_write, 0084 sf_tell, 0085 }; 0086 0087 SF_VIRTUAL_IO &VirtualFileQt::getSndfileVirtualIO() 0088 { 0089 return sfVirtualIO; 0090 } 0091 0092 VirtualFileQt *VirtualFileQt::get(void *user_data) 0093 { 0094 return static_cast<VirtualFileQt *>(user_data); 0095 }