SegmentDescriptors.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "SegmentDescriptors.hxx"
00023 #include "Segment.hxx"
00024
00025 namespace CLAM
00026 {
00027
00028 SegmentDescriptors::SegmentDescriptors(Segment* pSegment): Descriptor(eNumAttr)
00029 {
00030 MandatoryInit();
00031 mpSegment=pSegment;
00032 }
00033
00034 void SegmentDescriptors::DefaultInit() {
00035 mpSegment=0;
00036 mpStats=0;
00037 mSegmentStats=0;
00038 AddFramesD();
00039 UpdateData();
00040 }
00041
00042 void SegmentDescriptors::CopyInit(const SegmentDescriptors & copied) {
00043 mpSegment=copied.mpSegment;
00044 mpStats=0;
00045 mSegmentStats=0;
00046 }
00047
00048 const Segment* SegmentDescriptors::GetpSegment() const {
00049 return mpSegment;
00050 }
00051
00052 void SegmentDescriptors::SetpSegment(const Segment* pSegment) {
00053 if (HasFramesD())
00054 CLAM_ASSERT(mSegmentStats,"SegmentDescriptors::SetpSegment: Frame Prototype must be set before, please call SetFramePrototype");
00055 mpSegment=pSegment;
00056 if(mpSegment->HasAudio())
00057 {
00058
00059 AddAudioD();
00060 UpdateData();
00061 if(HasFramesD())
00062 mSegmentStats->SetArray(&GetFramesD());
00063 }
00064 if(mpSegment->HasAudio())
00065 GetAudioD().SetpAudio(&mpSegment->GetAudio());
00066 int nFrames=mpSegment->GetnFrames();
00067 int i;
00068 for (i=0;i<nFrames;i++){
00069 GetFramesD()[i].SetpFrame(&(mpSegment->GetFrame(i)));}
00070 }
00071
00072 void SegmentDescriptors::SetFramePrototype(const FrameDescriptors& proto, int nFrames)
00073 {
00074 int i;
00075 GetFramesD().Resize(nFrames);
00076 GetFramesD().SetSize(nFrames);
00077 for (i=0;i<nFrames;i++){
00078 GetFramesD()[i].SetPrototype(proto);}
00079 mSegmentStats= new StatsTmpl<false,FrameDescriptors,FrameDescriptors>(&GetFramesD());
00080 if(HasMeanD())
00081 GetMeanD().SetPrototype(proto);
00082 if(HasMaxD())
00083 GetMaxD().SetPrototype(proto);
00084 if(HasMinD())
00085 GetMinD().SetPrototype(proto);
00086 if(HasVarianceD())
00087 GetVarianceD().SetPrototype(proto);
00088 }
00089
00090 void SegmentDescriptors::Compute()
00091 {
00092
00093
00094
00095
00096
00097 ConcreteCompute();
00098 }
00099
00100 void SegmentDescriptors::ConcreteCompute()
00101 {
00102 int nFrames=mpSegment->GetnFrames();
00103 for (int i=0;i<nFrames;i++)
00104 GetFramesD()[i].Compute();
00105 if(HasMeanD())
00106 SetMeanD(mSegmentStats->GetMean());
00107 if(HasMaxD())
00108 SetMaxD(mSegmentStats->GetMax());
00109 if(HasMinD())
00110 SetMinD(mSegmentStats->GetMin());
00111 if(HasVarianceD())
00112 SetVarianceD(mSegmentStats->GetVariance());
00113 if(HasAudioD())
00114 GetAudioD().Compute();
00115 }
00116
00117 }
00118