/** \fn getPacket */ uint8_t ADM_audioStreamDCA::getPacket(uint8_t *obuffer,uint32_t *osize, uint32_t sizeMax,uint32_t *nbSample,uint64_t *dts) { #define ADM_LOOK_AHEAD DTS_HEADER_SIZE // Need 10 bytes... uint8_t data[ADM_LOOK_AHEAD]; uint32_t offset; ADM_DCA_INFO info; while(1) { // Do we have sync ? if(needBytes(ADM_LOOK_AHEAD)==false) { ADM_warning("DCA: Not sync found in buffer\n"); return false; } // Peek peek(ADM_LOOK_AHEAD,data); // Search start seq if(buffer[start]!=0x7F || buffer[start+1]!=0xFE) { read8(); continue; } if(buffer[start+2]!=0x80 || buffer[start+3]!=0x1) { read8(); read8(); continue; } if(false== ADM_DCAGetInfo(buffer+start, limit-start,&info,&offset)) { read8(); read8(); read8(); read8(); continue; } ADM_assert(info.frameSizeInBytes<=sizeMax); if(needBytes(info.frameSizeInBytes)==false) { ADM_warning("DCA: Not enough data\n"); return false; } *osize=info.frameSizeInBytes; read(*osize,obuffer); *nbSample=info.samples; *dts=lastDts; advanceDtsBySample(*nbSample); return 1; } }
/** \fn getPacket */ uint8_t ADM_audioStreamPCM::getPacket(uint8_t *obuffer,uint32_t *osize, uint32_t sizeMax,uint32_t *nbSample,uint64_t *dts) { uint64_t thisDts=0; if(!access->getPacket(obuffer,osize,sizeMax,&thisDts)) return 0; int sampleSize=2; if(wavHeader.bitspersample==8) sampleSize=1; uint32_t bytesPerSample=wavHeader.channels*sampleSize; //#warning fixme handle mono *nbSample=(uint32_t)(*osize/bytesPerSample); if(thisDts!=ADM_NO_PTS) setDts(thisDts); *dts=lastDts; // printf(">>audioCore : PCM packet : %s\n",ADM_us2plain(*dts)); advanceDtsBySample(*nbSample); return 1; }
/** \fn getPacket */ uint8_t ADM_audioStreamAC3::getPacket(uint8_t *obuffer,uint32_t *osize, uint32_t sizeMax,uint32_t *nbSample,uint64_t *dts) { #define ADM_LOOK_AHEAD 6 // Need 6 bytes... uint8_t data[ADM_LOOK_AHEAD]; int size; int flags,sample_rate,bit_rate; while(1) { // Do we have sync ? if(needBytes(ADM_LOOK_AHEAD)==false) return 0; // Peek peek(ADM_LOOK_AHEAD,data); // Search start seq if(buffer[start]!=0x0b || buffer[start+1]!=0x77) { read8(); continue; } // size= ADM_a52_syncinfo (buffer+start, &flags, &sample_rate, &bit_rate); if(!size) { read8(); continue; } ADM_assert(size<=sizeMax); if(needBytes(size)==false) { return false; } *osize=size; read(size,obuffer); *nbSample=256*6; *dts=lastDts; advanceDtsBySample(*nbSample); return 1; } }