Ich habe ein Array von PCM-Daten, könnte es 16 Bit, 24 Bit gepackt, 32 Bit, etc .. Es könnte unterzeichnet werden, oder unsigniert, und es könnte 32 oder 64 Bit Fließkomma sein. Es wird derzeit als eine "void **" - Matrix gespeichert, indiziert nach Kanal und dann nach Rahmen. Das Ziel ist es, meiner Bibliothek zu erlauben, irgendein PCM-Format aufzunehmen und zu puffern, ohne dass die Daten manipuliert werden müssen, um zu einer bestimmten Struktur zu passen. Wenn der A/D-Wandler 24 Bit gepackte Arrays von verschachteltem PCM ausspuckt, muss ich dies elegant akzeptieren. Ich muss auch 16 Bit non-interleaved, sowie jede Permutation der oben genannten Formate unterstützen.Void * Array-Casting zu float, int32, int16 usw.
Ich kenne die Bittiefe und andere Informationen zur Laufzeit, und ich versuche, Code effizient zu duplizieren, ohne Code zu duplizieren. Was ich brauche, ist eine effektive Möglichkeit, die Matrix zu übertragen, PCM-Daten in die Matrix einzufügen und sie später wieder herauszuziehen.
Ich kann die Matrix zu int32_t, oder int16_t für die 32 und 16 Bit vorzeichenbehafteten PCM jeweils zu werfen, muss ich wahrscheinlich auch die 24-Bit-PCM in einem Int32_t für 32-Bit, 8-Bit-Byte-Systeme speichern.
Kann jemand eine gute Möglichkeit empfehlen, Daten in dieses Array zu legen und später herauszuziehen? Ich möchte große Teile des Codes zu vermeiden, die wie folgt aussehen:
switch(mFormat)
{
case 1: // unsigned 8 bit
for(int i = 0; i < mChannels; i++)
framesArray = (uint8_t*)pcm[i];
break;
case 2: // signed 8 bit
for(int i = 0; i < mChannels; i++)
framesArray = (int8_t*)pcm[i];
break;
case 3: // unsigned 16 bit
...
Einschränkungen: Ich arbeite in C/C++, ohne Vorlagen, ohne RTTI, ohne STL. Denk eingebettet. Schwieriger wird es, wenn ich dies auf einen DSP mit 16 Bit Bytes portieren muss.
Hat jemand irgendwelche nützliche Makros, die sie vielleicht teilen möchten?
Danke,
-Griff
Ich hätte gedacht, dass dies genau die Problemvorlagen sollten lösen. Ist die "keine Vorlagen" -Ding eine Einschränkung Ihrer Toolchain, eine andere Einschränkung des Projekts oder nur eine persönliche Vorliebe? –
Was machen Sie mit den Daten? Es ist nicht klar aus der Frage, dass Sie tatsächlich das Casting überhaupt tun müssen, wenn Sie nur die Rohdaten puffern und später übergeben. – Kylotan
@Anon, vorausgesetzt das OP akzeptiert nicht einmal replizierte Syntax durch bedingte Verzweigung bewacht, würde ich wahrscheinlich erraten, die ausführbare Größe Angelegenheit rote Flagge auf Vorlagen zu erhöhen. (da Template-Funktionen zu größeren ausführbaren Dateien führen als switch ... case) – YeenFei