#include #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 }