00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "MP3ADUdescriptor.hh"
00022
00024
00025
00026
00027 #define TWO_BYTE_DESCR_FLAG 0x40
00028
00029 unsigned ADUdescriptor::generateDescriptor(unsigned char*& toPtr,
00030 unsigned remainingFrameSize) {
00031 unsigned descriptorSize = ADUdescriptor::computeSize(remainingFrameSize);
00032 switch (descriptorSize) {
00033 case 1: {
00034 *toPtr++ = (unsigned char)remainingFrameSize;
00035 break;
00036 }
00037 case 2: {
00038 generateTwoByteDescriptor(toPtr, remainingFrameSize);
00039 break;
00040 }
00041 }
00042
00043 return descriptorSize;
00044 }
00045
00046 void ADUdescriptor::generateTwoByteDescriptor(unsigned char*& toPtr,
00047 unsigned remainingFrameSize) {
00048 *toPtr++ = (TWO_BYTE_DESCR_FLAG|(unsigned char)(remainingFrameSize>>8));
00049 *toPtr++ = (unsigned char)(remainingFrameSize&0xFF);
00050 }
00051
00052 unsigned ADUdescriptor::getRemainingFrameSize(unsigned char*& fromPtr) {
00053 unsigned char firstByte = *fromPtr++;
00054
00055 if (firstByte&TWO_BYTE_DESCR_FLAG) {
00056
00057 unsigned char secondByte = *fromPtr++;
00058
00059 return ((firstByte&0x3F)<<8) | secondByte;
00060 } else {
00061
00062 return (firstByte&0x3F);
00063 }
00064 }
00065