aboutsummaryrefslogtreecommitdiff
path: root/Src/Agave/Encode/ifc_audioFileEncoder.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Agave/Encode/ifc_audioFileEncoder.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Agave/Encode/ifc_audioFileEncoder.h')
-rw-r--r--Src/Agave/Encode/ifc_audioFileEncoder.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/Src/Agave/Encode/ifc_audioFileEncoder.h b/Src/Agave/Encode/ifc_audioFileEncoder.h
new file mode 100644
index 00000000..f0f7c3ce
--- /dev/null
+++ b/Src/Agave/Encode/ifc_audioFileEncoder.h
@@ -0,0 +1,60 @@
+#pragma once
+#include <bfc/dispatch.h>
+class ifc_audioFileEncoder : public Dispatchable
+{
+protected:
+ ifc_audioFileEncoder() {}
+ ~ifc_audioFileEncoder() {}
+public:
+ /*
+ @param frame - frame number, optional (pass 0 every time if you don't have it).
+ it is used for special purposes and is not generally needed.
+ @param data - the input data (audio)
+ @param data_len - number of valid bytes in data
+ @param data_used - on return, set to the number of audio bytes read
+
+ note for implementors:
+ it is highly recommended that implementation use all available input data, but it is not required.
+
+ note for users:
+ if not all input data is read, you need to pass in the old data again
+ but have more available. This is likely to happen when the block size of the codec
+ does not match your buffer size
+ */
+ int Feed(uint32_t frame, const void *data, size_t data_len, size_t *data_used);
+
+ // same as above, but used when you have no more input to pass
+ // you can pass more audio data if you like (preferred if possible)
+ // or pass 0 for data & data_len if you passed all your data to Feed()
+ // note to implementors:
+ // for many implementations: close your encoder (e.g. vorbis) but not your file writer (e.g. ogg)
+ // note to users:
+ // you still need to call Finish().
+ int Finish(uint32_t frame, const void *data, size_t data_len, size_t *data_used);
+
+ // call this to do whatever necessary
+ // this is a separate call than Finish() because of time-constraints and the killswitch
+ // for many implementations: close your file writer object here, write seek table, etc.
+ // note to users:
+ // after this function succeeds, you may use the file (write metadata, etc)
+ int Finalize(int *killswitch);
+
+ // @param block_size - on return, set to the 'natural' number of bytes that the audio encoder expects
+ // can be helpful for users of this object to do more efficient I/O
+ // optional (check the return value when you call this!)
+ // but recommended
+ int GetBlockSize(size_t *block_size);
+
+ // @param fill_size - on return, set to the number of bytes needed to fill the audio encoder's current block
+ // might be 0 for some types (WAV).
+ // can be helpful for users of this object to do more efficient I/O
+ // optional (check the return value when you call this!)
+ // don't implement unless it's easy
+ int GetFillSize(size_t *fill_size);
+
+ // @param bytes_written - on return, set to the number of encoded bytes written so far.
+ // used by the CD ripper to show a 'real time' bitrate
+ // optional (check the return value when you call this!)
+ // don't implement unless it's easy
+ int GetBytesWritten(size_t *bytes_written);
+}; \ No newline at end of file