Bug 1193603. Part 2 - Fix miscalculation in converting micro seconds to seconds. r=jya.

This commit is contained in:
JW Wang 2015-08-12 18:02:34 +08:00
parent 23792b64c5
commit 89c5636186
11 changed files with 17 additions and 17 deletions

View File

@ -103,7 +103,7 @@ public:
virtual bool IsMediaSeekable() = 0;
virtual void MetadataLoaded(nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags, MediaDecoderEventVisibility aEventVisibility) = 0;
virtual void QueueMetadata(int64_t aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) = 0;
virtual void QueueMetadata(const media::TimeUnit& aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) = 0;
virtual void FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo, MediaDecoderEventVisibility aEventVisibility) = 0;
virtual void RemoveMediaTracks() = 0;

View File

@ -638,7 +638,7 @@ already_AddRefed<nsIPrincipal> MediaDecoder::GetCurrentPrincipal()
return mResource ? mResource->GetCurrentPrincipal() : nullptr;
}
void MediaDecoder::QueueMetadata(int64_t aPublishTime,
void MediaDecoder::QueueMetadata(const TimeUnit& aPublishTime,
nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags)
{

View File

@ -582,7 +582,7 @@ public:
// Send a new set of metadata to the state machine, to be dispatched to the
// main thread to be presented when the |currentTime| of the media is greater
// or equal to aPublishTime.
void QueueMetadata(int64_t aPublishTime,
void QueueMetadata(const media::TimeUnit& aPublishTime,
nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags) override;

View File

@ -1106,7 +1106,7 @@ void MediaDecoderStateMachine::UpdatePlaybackPosition(int64_t aTime)
UpdatePlaybackPositionInternal(aTime);
bool fragmentEnded = mFragmentEndTime >= 0 && GetMediaTime() >= mFragmentEndTime;
mMetadataManager.DispatchMetadataIfNeeded(mDecoder, aTime);
mMetadataManager.DispatchMetadataIfNeeded(mDecoder, TimeUnit::FromMicroseconds(aTime));
if (fragmentEnded) {
StopPlayback();
@ -3007,7 +3007,7 @@ bool MediaDecoderStateMachine::IsShutdown()
return mIsShutdown;
}
void MediaDecoderStateMachine::QueueMetadata(int64_t aPublishTime,
void MediaDecoderStateMachine::QueueMetadata(const TimeUnit& aPublishTime,
nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags)
{

View File

@ -332,7 +332,7 @@ public:
// shutting down. The decoder monitor must be held while calling this.
bool IsShutdown();
void QueueMetadata(int64_t aPublishTime,
void QueueMetadata(const media::TimeUnit& aPublishTime,
nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags);

View File

@ -11,6 +11,7 @@
#include "nsAutoPtr.h"
#include "AbstractMediaDecoder.h"
#include "TimeUnits.h"
#include "VideoUtils.h"
namespace mozilla {
@ -20,7 +21,7 @@ namespace mozilla {
class TimedMetadata : public LinkedListElement<TimedMetadata> {
public:
// The time, in microseconds, at which those metadata should be available.
int64_t mPublishTime;
media::TimeUnit mPublishTime;
// The metadata. The ownership is transfered to the element when dispatching to
// the main threads.
nsAutoPtr<MetadataTags> mTags;
@ -46,9 +47,9 @@ public:
mMetadataQueue.insertBack(aMetadata);
}
void DispatchMetadataIfNeeded(AbstractMediaDecoder* aDecoder, double aCurrentTime) {
void DispatchMetadataIfNeeded(AbstractMediaDecoder* aDecoder, const media::TimeUnit& aCurrentTime) {
TimedMetadata* metadata = mMetadataQueue.getFirst();
while (metadata && aCurrentTime >= static_cast<double>(metadata->mPublishTime) / USECS_PER_S) {
while (metadata && aCurrentTime >= metadata->mPublishTime) {
// Remove all media tracks from the list first.
nsCOMPtr<nsIRunnable> removeTracksEvent =
new RemoveMediaTracksEventRunner(aDecoder);

View File

@ -100,7 +100,7 @@ SourceBufferDecoder::FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo,
}
void
SourceBufferDecoder::QueueMetadata(int64_t aTime,
SourceBufferDecoder::QueueMetadata(const media::TimeUnit& aTime,
nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags)
{

View File

@ -51,7 +51,7 @@ public:
virtual void NotifyDecodedFrames(uint32_t aParsed, uint32_t aDecoded, uint32_t aDropped) final override;
virtual void NotifyWaitingForResourcesStatusChanged() final override;
virtual void OnReadMetadataCompleted() final override;
virtual void QueueMetadata(int64_t aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) final override;
virtual void QueueMetadata(const media::TimeUnit& aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) final override;
virtual void RemoveMediaTracks() final override;
virtual void SetMediaSeekable(bool aMediaSeekable) final override;
virtual bool HasInitializationData() final override;

View File

@ -814,11 +814,10 @@ bool OggReader::ReadOggChain()
if (chained) {
SetChained(true);
{
nsAutoPtr<MediaInfo> info(new MediaInfo());
*info = mInfo;
nsAutoPtr<MediaInfo> info(new MediaInfo(mInfo));
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
mDecoder->QueueMetadata((mDecodedAudioFrames * USECS_PER_S) / mInfo.mAudio.mRate,
info, tags);
auto t = mDecodedAudioFrames * USECS_PER_S / mInfo.mAudio.mRate;
mDecoder->QueueMetadata(media::TimeUnit::FromMicroseconds(t), info, tags);
}
return true;
}

View File

@ -130,7 +130,7 @@ BufferDecoder::FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo, MediaDecoderEventVis
}
void
BufferDecoder::QueueMetadata(int64_t aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags)
BufferDecoder::QueueMetadata(const media::TimeUnit& aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags)
{
// ignore
}

View File

@ -58,7 +58,7 @@ public:
virtual void MetadataLoaded(nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags,
MediaDecoderEventVisibility aEventVisibility) final override;
virtual void QueueMetadata(int64_t aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) final override;
virtual void QueueMetadata(const media::TimeUnit& aTime, nsAutoPtr<MediaInfo> aInfo, nsAutoPtr<MetadataTags> aTags) final override;
virtual void FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo,
MediaDecoderEventVisibility aEventVisibility) final override;