mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
4397a5852e
This patch simply moves the MetadataTags typedef to nsMediaDecoder.h to reduce the dependencies on nsHTMLMediaElements.h. The rest of the changes are made to make this compile.
100 lines
3.0 KiB
C++
100 lines
3.0 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* 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(nsWaveReader_h_)
|
|
#define nsWaveReader_h_
|
|
|
|
#include "nsBuiltinDecoderReader.h"
|
|
|
|
class nsBuiltinDecoder;
|
|
class nsTimeRanges;
|
|
|
|
class nsWaveReader : public nsBuiltinDecoderReader
|
|
{
|
|
public:
|
|
nsWaveReader(nsBuiltinDecoder* aDecoder);
|
|
~nsWaveReader();
|
|
|
|
virtual nsresult Init(nsBuiltinDecoderReader* aCloneDonor);
|
|
virtual bool DecodeAudioData();
|
|
virtual bool DecodeVideoFrame(bool &aKeyframeSkip,
|
|
int64_t aTimeThreshold);
|
|
|
|
virtual bool HasAudio()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
virtual bool HasVideo()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual nsresult ReadMetadata(nsVideoInfo* aInfo,
|
|
MetadataTags** aTags);
|
|
virtual nsresult Seek(int64_t aTime, int64_t aStartTime, int64_t aEndTime, int64_t aCurrentTime);
|
|
virtual nsresult GetBuffered(nsTimeRanges* aBuffered, int64_t aStartTime);
|
|
|
|
// To seek in a buffered range, we just have to seek the stream.
|
|
virtual bool IsSeekableInBufferedRanges() {
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
bool ReadAll(char* aBuf, int64_t aSize, int64_t* aBytesRead = nullptr);
|
|
bool LoadRIFFChunk();
|
|
bool ScanForwardUntil(uint32_t aWantedChunk, uint32_t* aChunkSize);
|
|
bool LoadFormatChunk();
|
|
bool FindDataOffset();
|
|
|
|
// Returns the number of seconds that aBytes represents based on the
|
|
// current audio parameters. e.g. 176400 bytes is 1 second at 16-bit
|
|
// stereo 44.1kHz. The time is rounded to the nearest microsecond.
|
|
double BytesToTime(int64_t aBytes) const;
|
|
|
|
// Returns the number of bytes that aTime represents based on the current
|
|
// audio parameters. e.g. 1 second is 176400 bytes at 16-bit stereo
|
|
// 44.1kHz.
|
|
int64_t TimeToBytes(double aTime) const;
|
|
|
|
// Rounds aBytes down to the nearest complete audio frame. Assumes
|
|
// beginning of byte range is already frame aligned by caller.
|
|
int64_t RoundDownToFrame(int64_t aBytes) const;
|
|
int64_t GetDataLength();
|
|
int64_t GetPosition();
|
|
|
|
/*
|
|
Metadata extracted from the WAVE header. Used to initialize the audio
|
|
stream, and for byte<->time domain conversions.
|
|
*/
|
|
|
|
// Number of samples per second. Limited to range [100, 96000] in LoadFormatChunk.
|
|
uint32_t mSampleRate;
|
|
|
|
// Number of channels. Limited to range [1, 2] in LoadFormatChunk.
|
|
uint32_t mChannels;
|
|
|
|
// Size of a single audio frame, which includes a sample for each channel
|
|
// (interleaved).
|
|
uint32_t mFrameSize;
|
|
|
|
// The sample format of the PCM data. nsAudioStream::SampleFormat doesn't
|
|
// support U8.
|
|
enum {
|
|
FORMAT_U8,
|
|
FORMAT_S16
|
|
} mSampleFormat;
|
|
|
|
// Size of PCM data stored in the WAVE as reported by the data chunk in
|
|
// the media.
|
|
int64_t mWaveLength;
|
|
|
|
// Start offset of the PCM data in the media stream. Extends mWaveLength
|
|
// bytes.
|
|
int64_t mWavePCMOffset;
|
|
};
|
|
|
|
#endif
|