diff --git a/src/Zend/Media/Mpeg/Abs.php b/src/Zend/Media/Mpeg/Abs.php
index c8600e5..2dbb0a7 100644
--- a/src/Zend/Media/Mpeg/Abs.php
+++ b/src/Zend/Media/Mpeg/Abs.php
@@ -196,8 +196,9 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
/* Read necessary frames */
if ($this->getOption('readmode', 'lazy') == 'lazy') {
- if (($header = $this->_xingHeader) !== null ||
- ($header = $this->_vbriHeader) !== null) {
+ if ((($header = $this->_xingHeader) !== null ||
+ ($header = $this->_vbriHeader) !== null) &&
+ $header->getFrames() != 0) {
$this->_estimatedPlayDuration = $header->getFrames() *
$firstFrame->getSamples() /
$firstFrame->getSamplingFrequency();
@@ -240,7 +241,7 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
*/
public function hasXingHeader()
{
- return $this->_xingHeader === null;
+ return $this->_xingHeader !== null;
}
/**
@@ -262,7 +263,7 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
*/
public function hasLameHeader()
{
- return $this->_lameHeader === null;
+ return $this->_lameHeader !== null;
}
/**
@@ -277,14 +278,14 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
}
/**
- * Returns true if the audio bitstream contains the Fraunhofer IIS
- * VBR header, or false otherwise.
+ * Returns true if the audio bitstream contains the Fraunhofer
+ * IIS VBR header, or false otherwise.
*
* @return boolean
*/
public function hasVbriHeader()
{
- return $this->_vbriHeader === null;
+ return $this->_vbriHeader !== null;
}
/**
@@ -299,8 +300,8 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
}
/**
- * Returns the bitrate estimate. This value is either fetched from one of the
- * headers or calculated based on the read frames.
+ * Returns the bitrate estimate. This value is either fetched from one of
+ * the headers or calculated based on the read frames.
*
* @return integer
*/
@@ -310,8 +311,8 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
}
/**
- * For variable bitrate files this method returns the exact average bitrate of
- * the whole file.
+ * For variable bitrate files this method returns the exact average bitrate
+ * of the whole file.
*
* @return integer
*/
@@ -403,7 +404,7 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
$this->_reader->setOffset($this->_lastFrameOffset);
}
- for ($i = 0; $this->_reader->getOffset() < $this->_bytes; $i++) {
+ for ($i = 0; ($j = $this->_reader->getOffset()) < $this->_bytes; $i++) {
$options = $this->getOptions();
$frame = new Zend_Media_Mpeg_Abs_Frame($this->_reader, $options);
@@ -416,7 +417,9 @@ final class Zend_Media_Mpeg_Abs extends Zend_Media_Mpeg_Abs_Object
if ($limit === null) {
$this->_lastFrameOffset = $this->_reader->getOffset();
}
- if ($limit !== null && ($i + 1) == $limit) {
+ if (($limit !== null && (($i + 1) == $limit)) ||
+ ($limit !== null &&
+ ($j + $frame->getLength() >= $this->_bytes))) {
$this->_lastFrameOffset = $this->_reader->getOffset();
break;
}