function build() { $writer_head = new IO_Bit(); $writer = new IO_Bit(); /* SWF Header */ $writer_head->putData($this->_headers['Signature']); $writer_head->putUI8($this->_headers['Version']); $writer_head->putUI32LE($this->_headers['FileLength']); /* SWF Movie Header */ IO_SWF_Type_RECT::build($writer, $this->_headers['FrameSize']); $writer->byteAlign(); $writer->putUI16LE($this->_headers['FrameRate']); $writer->putUI16LE($this->_headers['FrameCount']); /* SWF Tags */ foreach ($this->_tags as $idx => $tag) { $tagData = $tag->build(); if ($tagData != false) { $writer->putData($tagData); } else { throw new IO_SWF_Exception("tag build failed (tag idx={$idx})"); } } list($fileLength, $bit_offset_dummy) = $writer->getOffset(); $fileLength += 8; // swf header $this->_headers['FileLength'] = $fileLength; $writer_head->setUI32LE($fileLength, 4); if ($this->_headers['Signature'][0] == 'C') { return $writer_head->output() . gzcompress($writer->output()); } return $writer_head->output() . $writer->output(); }