74 lines
No EOL
2.5 KiB
C++
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
|
|
} |