gecko/content/media/raw/nsRawReader.h
Ralph Giles f63a794f44 Bug 763010 - Expose media element metadata. r=cpearce
Implements a media.mozGetMetadata() method returning a new javascript object whose properties are key value pairs respresenting metadata tags from the media resource. This data is available after readystate enters METADATA_LOADED.

Currently this is only implemented for Ogg Vorbis streams.

Media format metadata is parsed out by the media decoders. In the nsCodecStateMachine::ReadMetadata subclasses we fill in an nsDataHashtable pointer using the format-specifc api.

The hash pointer is passed up to the media element as part of the MetadataLoaded event.

The hash is deleted if the load is aborted. The audio metadata is also reset to zero (as in the constructor), resolving a todo comment.
2012-07-30 20:14:29 -04:00

56 lines
1.5 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#if !defined(nsRawReader_h_)
#define nsRawReader_h_
#include "nsBuiltinDecoderReader.h"
#include "nsRawStructs.h"
class nsRawReader : public nsBuiltinDecoderReader
{
public:
nsRawReader(nsBuiltinDecoder* aDecoder);
~nsRawReader();
virtual nsresult Init(nsBuiltinDecoderReader* aCloneDonor);
virtual nsresult ResetDecode();
virtual bool DecodeAudioData();
virtual bool DecodeVideoFrame(bool &aKeyframeSkip,
PRInt64 aTimeThreshold);
virtual bool HasAudio()
{
return false;
}
virtual bool HasVideo()
{
return true;
}
virtual nsresult ReadMetadata(nsVideoInfo* aInfo,
nsHTMLMediaElement::MetadataTags** aTags);
virtual nsresult Seek(PRInt64 aTime, PRInt64 aStartTime, PRInt64 aEndTime, PRInt64 aCurrentTime);
virtual nsresult GetBuffered(nsTimeRanges* aBuffered, PRInt64 aStartTime);
// By seeking in the media resource, it is possible to seek.
bool IsSeekableInBufferedRanges() {
return true;
}
private:
bool ReadFromResource(MediaResource *aResource, PRUint8 *aBuf, PRUint32 aLength);
nsRawVideoHeader mMetadata;
PRUint32 mCurrentFrame;
double mFrameRate;
PRUint32 mFrameSize;
nsIntRect mPicture;
};
#endif