arduino-audio-tools
Loading...
Searching...
No Matches
Video.h
Go to the documentation of this file.
1#pragma once
4#include "stdint.h"
5
12namespace audio_tools {
13
22 public:
23 virtual void beginFrame(size_t size) = 0;
24 virtual size_t write(const uint8_t *data, size_t len) = 0;
25 virtual uint32_t endFrame() = 0;
26};
27
38 public:
40 virtual void writeAudio(Print *out, uint8_t *data, size_t size) {
41 out->write(data, size);
42 }
43
48 uint32_t delay_ms = microsecondsPerFrame / 1000;
49 delay(delay_ms);
50 }
51};
52
64 public:
65 VideoAudioBufferedSync(int bufferSize, int correctionMs) {
66 ring_buffer.resize(bufferSize);
68 }
69
71 void writeAudio(Print *out, uint8_t *data, size_t size) {
72 p_out = out;
73 if (ring_buffer.availableForWrite() < size) {
77 p_out->write(audio, bytes_to_play);
78 }
79 size_t written = ring_buffer.writeArray(data, size);
80 assert(written = size);
81 }
82
86 uint32_t delay_ms = microsecondsPerFrame / 1000;
87 uint64_t timeout = millis() + delay_ms + correction_ms;
88 uint8_t audio[8];
89 // output audio
90 while (millis() < timeout) {
91 ring_buffer.readArray(audio, 8);
92 p_out->write(audio, 8);
93 }
94 }
95
96 protected:
98 Print *p_out = nullptr;
100};
101
102} // namespace audio_tools
#define assert(T)
Definition avr.h:10
virtual int readArray(T data[], int len)
reads multiple values
Definition Buffers.h:33
virtual int writeArray(const T data[], int len)
Fills the buffer data.
Definition Buffers.h:55
Definition NoArduino.h:62
virtual size_t write(const uint8_t *data, size_t len)
Definition NoArduino.h:126
Implements a typed Ringbuffer.
Definition Buffers.h:341
virtual int availableForWrite() override
provides the number of entries that are available to write
Definition Buffers.h:413
virtual bool resize(int len)
Resizes the buffer if supported: returns false if not supported.
Definition Buffers.h:418
Logic to Synchronize video and audio output: we use a buffer to store the audio and instead of delayi...
Definition Video.h:63
VideoAudioBufferedSync(int bufferSize, int correctionMs)
Definition Video.h:65
Print * p_out
Definition Video.h:98
void delayVideoFrame(int32_t microsecondsPerFrame, uint32_t time_used_ms)
Definition Video.h:85
int correction_ms
Definition Video.h:99
void writeAudio(Print *out, uint8_t *data, size_t size)
Process the audio data.
Definition Video.h:71
RingBuffer< uint8_t > ring_buffer
Definition Video.h:97
Logic to Synchronize video and audio output: This is the minimum implementatin which actually does no...
Definition Video.h:37
virtual void delayVideoFrame(int32_t microsecondsPerFrame, uint32_t time_used_ms)
Definition Video.h:46
virtual void writeAudio(Print *out, uint8_t *data, size_t size)
Process the audio data.
Definition Video.h:40
Abstract class for video playback. This class is used to assemble a complete video frame in memory.
Definition Video.h:21
virtual size_t write(const uint8_t *data, size_t len)=0
virtual uint32_t endFrame()=0
virtual void beginFrame(size_t size)=0
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
void delay(unsigned long ms)
Definition Time.h:23
uint32_t millis()
Returns the milliseconds since the start.
Definition Time.h:12
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512