home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2004 March / PCWELT_3_2004.ISO / pcwsoft / flaskmpeg_078_39_src.z.exe / flaskmpeg / Audio / AudFrameBuffer.cpp next >
Encoding:
C/C++ Source or Header  |  2002-10-28  |  2.7 KB  |  126 lines

  1. // AudFrameBuffer.cpp: implementation of the CAudFrameBuffer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #ifndef NULL
  6. #define NULL 0
  7. #endif 
  8.  
  9. #include "AudFrameBuffer.h"
  10. #include <memory.h>
  11.  
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15.  
  16. CAudioFrame::CAudioFrame(ui8               *data,
  17.                          ui32               datasize,
  18.                          TAudFramePresInfo *pInfo, 
  19.                          CAudioFrame       *next, 
  20.                          CAudioFrame       *previous){
  21.     if(this->data = new ui8[datasize] ){
  22.         memcpy( this->data, data, datasize );
  23.         this->datasize = datasize;
  24.     }
  25.     else{
  26.         this->data = NULL;
  27.         datasize   = 0;
  28.     }
  29.     mpeg_layer = 0;
  30.     memcpy( &this->pInfo, pInfo, sizeof(TAudFramePresInfo) );
  31.     this->next     = next;
  32.     this->previous = previous;
  33.  
  34.     
  35. }
  36. CAudioFrame::~CAudioFrame(){
  37.     if(data)
  38.         delete data;
  39. }
  40. CAudFrameBuffer::CAudFrameBuffer()
  41. {
  42.     this->firstFrame = NULL;
  43.     this->lastFrame  = NULL;
  44.         n_frames       = 0;
  45. }
  46.  
  47. CAudFrameBuffer::~CAudFrameBuffer()
  48. {
  49.   RemoveAllFrames();
  50. }
  51.  
  52. void CAudFrameBuffer::RemoveAllFrames()
  53. {
  54.   CAudioFrame *temp;
  55.   while(lastFrame!=NULL)
  56.   {
  57.     temp = lastFrame->previous;
  58.     delete lastFrame;
  59.     lastFrame = temp;
  60.   }
  61.   this->firstFrame = NULL;
  62.   this->lastFrame  = NULL;
  63. }
  64.  
  65. int CAudFrameBuffer::AddFrame(ui8 *data, ui32 datasize, TAudFramePresInfo *pInfo)
  66. {
  67.     CAudioFrame *temp;
  68.  
  69.     if( lastFrame==NULL && firstFrame==NULL)
  70.         firstFrame=lastFrame= new CAudioFrame(data, datasize , pInfo, NULL, NULL);
  71.     else{
  72.         temp = lastFrame;
  73.         // create new frame
  74.         lastFrame = new CAudioFrame(data, datasize , pInfo, NULL, temp);
  75.         temp->next = lastFrame;
  76.         if(lastFrame)
  77.             lastFrame->previous = temp;
  78.     }
  79.     n_frames++;
  80.     
  81.     return 1;
  82. }
  83.  
  84. int CAudFrameBuffer::RemoveFirstFrame()
  85. {
  86.     CAudioFrame *temp;
  87.     if(firstFrame){
  88.         if(!firstFrame->next)
  89.             lastFrame = NULL;
  90.         temp = firstFrame->next;
  91.         delete firstFrame;
  92.         firstFrame = temp;
  93.         if(firstFrame)
  94.             firstFrame->previous=NULL;
  95.         n_frames--;
  96.         return 1;
  97.     }
  98.     else return 0;
  99. }
  100.  
  101. int CAudFrameBuffer::RemoveFrame(CAudioFrame *frame)
  102. {
  103.     CAudioFrame *previous, *next;
  104.     if(frame){
  105.         previous = frame->previous;
  106.             next = frame->next;
  107.  
  108.         delete frame;
  109.  
  110.         if(previous)
  111.             previous->next = next;
  112.         else //previous was null. The deleted item was the first item. Update firstFrame
  113.             firstFrame = next;
  114.  
  115.         if(next)
  116.             next->previous = previous;
  117.         else //next was null. The deleted item was the last item. Update lastFrame
  118.             lastFrame = previous;
  119.  
  120.         n_frames--;
  121.     
  122.         return 1;
  123.     }
  124.     return 0;
  125. }
  126.