+
+qint64 SOUND_BUFFER_QT::writeData(const char *data, qint64 len)
+{
+ if(!(isWritable()) || !(isOpen())) return qint64(-1);
+ //printf("writeData() called len=%lld\n", len);
+ return write_to_buffer(data, len);
+}
+
+// For asynchronous emitting.
+void SOUND_BUFFER_QT::_emit_for_write()
+{
+ qint64 len = wroteFromBefore.exchange(0);
+ is_emitted = false;
+ emit bytesWritten(len);
+ emit readyRead();
+}
+
+// unique functions
+
+bool SOUND_BUFFER_QT::resize(qint64 sz)
+{
+// printf("resize()\n");
+ std::shared_ptr<BUFFER_TYPE> p = m_buffer;
+ if((sz <= 0) || (sz >= INT_MAX) || !(p)) {
+ return false;
+ }
+ is_emitted = false;
+ wroteFromBefore = 0;
+ return p->resize((int)sz);
+}
+
+qint64 SOUND_BUFFER_QT::real_buffer_size()
+{
+ std::shared_ptr<BUFFER_TYPE> p = m_buffer;
+ if(p) {
+ int64_t sz = (int64_t)(p->fifo_size());
+ return (sz > 0) ? sz : 0;
+ }
+ return 0;
+}