JD2022-TU1/main/extern/Camcam/LIBS/X264 - Lib/VideoSound.cpp

74 lines
No EOL
2.5 KiB
C++

#include <stdint.h>
#include "SCENE.h"
#include "X264.h"
#include "CODEC.h"
u32 Timer = 0;
typedef struct Multiplexer_
{
u32 Identityfier;
u32 SoundSize;
u32 VideoSize;
u32 UserSize;
} Multiplexer;
#define ENCODE_SOUND
u32 Encode_FRAME_AND_SOUND(void *H, MAP *PPicture, char *DataBuffer, u32 FROMSCRATCH, u32 Q, u32 R)
{
#ifdef ENCODE_SOUND
static u32 LastTime = 0;
Multiplexer *pHeader;
pHeader = (Multiplexer *)DataBuffer;
pHeader ->Identityfier = 'SOUN';
DataBuffer += sizeof(Multiplexer);//*/
/* Encode Video ********************************************************************/
pHeader->VideoSize = Encode_FRAME(H, PPicture, DataBuffer, FROMSCRATCH, Q, R);
DataBuffer += pHeader->VideoSize;
/* Encode Sound ********************************************************************/
Timer = timeGetTime() - LastTime ;
// if (Timer > 100) Timer = 100;
LastTime = timeGetTime();
pHeader->SoundSize = GetSoundData( (u8*)DataBuffer , Timer, DATA_MAX_SOUND);
DataBuffer += pHeader->SoundSize;
return sizeof(Multiplexer) + pHeader->SoundSize + pHeader->VideoSize;
#else
return Encode_FRAME(H, PPicture, DataBuffer, FROMSCRATCH, Q, R) ;
#endif
}
u32 Decode_FRAME_AND_SOUND(void *H, MAP *PPicture, char *DataBuffer, u32 FROMSCRATCH)
{
#ifdef ENCODE_SOUND
Multiplexer *pHeader;
pHeader = (Multiplexer *)DataBuffer;
DataBuffer += sizeof(Multiplexer);//*/
if (pHeader ->Identityfier == 'SOUN')
{
u32 OKValue;
/* Decode Video ********************************************************************/
OKValue = Decode_FRAME(H, PPicture, DataBuffer, pHeader->VideoSize) ;
DataBuffer += pHeader->VideoSize;//*/
/* Decode Video ********************************************************************/
if (pHeader->SoundSize) SetSoundData( (u8*)DataBuffer, pHeader->SoundSize);
if ( SND_MODE_DEBUG )
{
char TEXT[200];
sprintf(TEXT,"Video:%2i,%03iko",pHeader->VideoSize>>10,(pHeader->VideoSize&1023) * 1000 / 1023);
DRawTEXT_Soft_B((u8*)TEXT,(u32*)PPicture->BASE,0,PPicture->SY - 16,PPicture->SX, PPicture->SY, 0xff0000);
sprintf(TEXT,"Sound:%2i,%03iko",pHeader->SoundSize>>10,(pHeader->SoundSize&1023) * 1000 / 1023);
DRawTEXT_Soft_B((u8*)TEXT,(u32*)PPicture->BASE,0,PPicture->SY - 32,PPicture->SX, PPicture->SY, 0xff00FF);
sprintf( TEXT, "Timer: %i ms", Timer );
DRawTEXT_Soft_B( (u8*)TEXT, (u32*)PPicture->BASE, 0, PPicture->SY - 48, PPicture->SX, PPicture->SY, 0x00ffff);
}
return OKValue;
}
else return -1;
#else
return Decode_FRAME(H, PPicture, DataBuffer, FROMSCRATCH) ;//*/
#endif
}