mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
09e204851c
--HG-- rename : content/media/AbstractMediaDecoder.h => dom/media/AbstractMediaDecoder.h rename : content/media/AudioBufferUtils.h => dom/media/AudioBufferUtils.h rename : content/media/AudioChannelFormat.cpp => dom/media/AudioChannelFormat.cpp rename : content/media/AudioChannelFormat.h => dom/media/AudioChannelFormat.h rename : content/media/AudioCompactor.cpp => dom/media/AudioCompactor.cpp rename : content/media/AudioCompactor.h => dom/media/AudioCompactor.h rename : content/media/AudioMixer.h => dom/media/AudioMixer.h rename : content/media/AudioSampleFormat.h => dom/media/AudioSampleFormat.h rename : content/media/AudioSegment.cpp => dom/media/AudioSegment.cpp rename : content/media/AudioSegment.h => dom/media/AudioSegment.h rename : content/media/AudioSink.cpp => dom/media/AudioSink.cpp rename : content/media/AudioSink.h => dom/media/AudioSink.h rename : content/media/AudioStream.cpp => dom/media/AudioStream.cpp rename : content/media/AudioStream.h => dom/media/AudioStream.h rename : content/media/AudioStreamTrack.cpp => dom/media/AudioStreamTrack.cpp rename : content/media/AudioStreamTrack.h => dom/media/AudioStreamTrack.h rename : content/media/AudioTrack.cpp => dom/media/AudioTrack.cpp rename : content/media/AudioTrack.h => dom/media/AudioTrack.h rename : content/media/AudioTrackList.cpp => dom/media/AudioTrackList.cpp rename : content/media/AudioTrackList.h => dom/media/AudioTrackList.h rename : content/media/BufferMediaResource.h => dom/media/BufferMediaResource.h rename : content/media/CubebUtils.cpp => dom/media/CubebUtils.cpp rename : content/media/CubebUtils.h => dom/media/CubebUtils.h rename : content/media/DOMMediaStream.cpp => dom/media/DOMMediaStream.cpp rename : content/media/DOMMediaStream.h => dom/media/DOMMediaStream.h rename : content/media/DecoderTraits.cpp => dom/media/DecoderTraits.cpp rename : content/media/DecoderTraits.h => dom/media/DecoderTraits.h rename : content/media/EncodedBufferCache.cpp => dom/media/EncodedBufferCache.cpp rename : content/media/EncodedBufferCache.h => dom/media/EncodedBufferCache.h rename : content/media/FileBlockCache.cpp => dom/media/FileBlockCache.cpp rename : content/media/FileBlockCache.h => dom/media/FileBlockCache.h rename : content/media/GraphDriver.cpp => dom/media/GraphDriver.cpp rename : content/media/GraphDriver.h => dom/media/GraphDriver.h rename : content/media/Latency.cpp => dom/media/Latency.cpp rename : content/media/Latency.h => dom/media/Latency.h rename : content/media/MP3FrameParser.cpp => dom/media/MP3FrameParser.cpp rename : content/media/MP3FrameParser.h => dom/media/MP3FrameParser.h rename : content/media/MediaCache.cpp => dom/media/MediaCache.cpp rename : content/media/MediaCache.h => dom/media/MediaCache.h rename : content/media/MediaData.cpp => dom/media/MediaData.cpp rename : content/media/MediaData.h => dom/media/MediaData.h rename : content/media/MediaDataDecodedListener.h => dom/media/MediaDataDecodedListener.h rename : content/media/MediaDecoder.cpp => dom/media/MediaDecoder.cpp rename : content/media/MediaDecoder.h => dom/media/MediaDecoder.h rename : content/media/MediaDecoderOwner.h => dom/media/MediaDecoderOwner.h rename : content/media/MediaDecoderReader.cpp => dom/media/MediaDecoderReader.cpp rename : content/media/MediaDecoderReader.h => dom/media/MediaDecoderReader.h rename : content/media/MediaDecoderStateMachine.cpp => dom/media/MediaDecoderStateMachine.cpp rename : content/media/MediaDecoderStateMachine.h => dom/media/MediaDecoderStateMachine.h rename : content/media/MediaDecoderStateMachineScheduler.cpp => dom/media/MediaDecoderStateMachineScheduler.cpp rename : content/media/MediaDecoderStateMachineScheduler.h => dom/media/MediaDecoderStateMachineScheduler.h rename : content/media/MediaInfo.h => dom/media/MediaInfo.h rename : content/media/MediaMetadataManager.h => dom/media/MediaMetadataManager.h rename : content/media/MediaQueue.h => dom/media/MediaQueue.h rename : content/media/MediaRecorder.cpp => dom/media/MediaRecorder.cpp rename : content/media/MediaRecorder.h => dom/media/MediaRecorder.h rename : content/media/MediaResource.cpp => dom/media/MediaResource.cpp rename : content/media/MediaResource.h => dom/media/MediaResource.h rename : content/media/MediaSegment.h => dom/media/MediaSegment.h rename : content/media/MediaShutdownManager.cpp => dom/media/MediaShutdownManager.cpp rename : content/media/MediaShutdownManager.h => dom/media/MediaShutdownManager.h rename : content/media/MediaStreamGraph.cpp => dom/media/MediaStreamGraph.cpp rename : content/media/MediaStreamGraph.h => dom/media/MediaStreamGraph.h rename : content/media/MediaStreamGraphImpl.h => dom/media/MediaStreamGraphImpl.h rename : content/media/MediaStreamTrack.cpp => dom/media/MediaStreamTrack.cpp rename : content/media/MediaStreamTrack.h => dom/media/MediaStreamTrack.h rename : content/media/MediaTaskQueue.cpp => dom/media/MediaTaskQueue.cpp rename : content/media/MediaTaskQueue.h => dom/media/MediaTaskQueue.h rename : content/media/MediaTrack.cpp => dom/media/MediaTrack.cpp rename : content/media/MediaTrack.h => dom/media/MediaTrack.h rename : content/media/MediaTrackList.cpp => dom/media/MediaTrackList.cpp rename : content/media/MediaTrackList.h => dom/media/MediaTrackList.h rename : content/media/RtspMediaResource.cpp => dom/media/RtspMediaResource.cpp rename : content/media/RtspMediaResource.h => dom/media/RtspMediaResource.h rename : content/media/SharedBuffer.h => dom/media/SharedBuffer.h rename : content/media/SharedThreadPool.cpp => dom/media/SharedThreadPool.cpp rename : content/media/SharedThreadPool.h => dom/media/SharedThreadPool.h rename : content/media/StreamBuffer.cpp => dom/media/StreamBuffer.cpp rename : content/media/StreamBuffer.h => dom/media/StreamBuffer.h rename : content/media/TextTrack.cpp => dom/media/TextTrack.cpp rename : content/media/TextTrack.h => dom/media/TextTrack.h rename : content/media/TextTrackCue.cpp => dom/media/TextTrackCue.cpp rename : content/media/TextTrackCue.h => dom/media/TextTrackCue.h rename : content/media/TextTrackCueList.cpp => dom/media/TextTrackCueList.cpp rename : content/media/TextTrackCueList.h => dom/media/TextTrackCueList.h rename : content/media/TextTrackList.cpp => dom/media/TextTrackList.cpp rename : content/media/TextTrackList.h => dom/media/TextTrackList.h rename : content/media/TextTrackRegion.cpp => dom/media/TextTrackRegion.cpp rename : content/media/TextTrackRegion.h => dom/media/TextTrackRegion.h rename : content/media/ThreadPoolCOMListener.cpp => dom/media/ThreadPoolCOMListener.cpp rename : content/media/ThreadPoolCOMListener.h => dom/media/ThreadPoolCOMListener.h rename : content/media/TimeVarying.h => dom/media/TimeVarying.h rename : content/media/TrackUnionStream.cpp => dom/media/TrackUnionStream.cpp rename : content/media/TrackUnionStream.h => dom/media/TrackUnionStream.h rename : content/media/VideoFrameContainer.cpp => dom/media/VideoFrameContainer.cpp rename : content/media/VideoFrameContainer.h => dom/media/VideoFrameContainer.h rename : content/media/VideoPlaybackQuality.cpp => dom/media/VideoPlaybackQuality.cpp rename : content/media/VideoPlaybackQuality.h => dom/media/VideoPlaybackQuality.h rename : content/media/VideoSegment.cpp => dom/media/VideoSegment.cpp rename : content/media/VideoSegment.h => dom/media/VideoSegment.h rename : content/media/VideoStreamTrack.cpp => dom/media/VideoStreamTrack.cpp rename : content/media/VideoStreamTrack.h => dom/media/VideoStreamTrack.h rename : content/media/VideoTrack.cpp => dom/media/VideoTrack.cpp rename : content/media/VideoTrack.h => dom/media/VideoTrack.h rename : content/media/VideoTrackList.cpp => dom/media/VideoTrackList.cpp rename : content/media/VideoTrackList.h => dom/media/VideoTrackList.h rename : content/media/VideoUtils.cpp => dom/media/VideoUtils.cpp rename : content/media/VideoUtils.h => dom/media/VideoUtils.h rename : content/media/VorbisUtils.h => dom/media/VorbisUtils.h rename : content/media/WebVTTListener.cpp => dom/media/WebVTTListener.cpp rename : content/media/WebVTTListener.h => dom/media/WebVTTListener.h rename : content/media/android/AndroidMediaDecoder.cpp => dom/media/android/AndroidMediaDecoder.cpp rename : content/media/android/AndroidMediaDecoder.h => dom/media/android/AndroidMediaDecoder.h rename : content/media/android/AndroidMediaPluginHost.cpp => dom/media/android/AndroidMediaPluginHost.cpp rename : content/media/android/AndroidMediaPluginHost.h => dom/media/android/AndroidMediaPluginHost.h rename : content/media/android/AndroidMediaReader.cpp => dom/media/android/AndroidMediaReader.cpp rename : content/media/android/AndroidMediaReader.h => dom/media/android/AndroidMediaReader.h rename : content/media/android/AndroidMediaResourceServer.cpp => dom/media/android/AndroidMediaResourceServer.cpp rename : content/media/android/AndroidMediaResourceServer.h => dom/media/android/AndroidMediaResourceServer.h rename : content/media/android/MPAPI.h => dom/media/android/MPAPI.h rename : content/media/android/moz.build => dom/media/android/moz.build rename : content/media/apple/AppleDecoder.cpp => dom/media/apple/AppleDecoder.cpp rename : content/media/apple/AppleDecoder.h => dom/media/apple/AppleDecoder.h rename : content/media/apple/AppleMP3Reader.cpp => dom/media/apple/AppleMP3Reader.cpp rename : content/media/apple/AppleMP3Reader.h => dom/media/apple/AppleMP3Reader.h rename : content/media/apple/moz.build => dom/media/apple/moz.build rename : content/media/compiledtest/TestAudioBuffers.cpp => dom/media/compiledtest/TestAudioBuffers.cpp rename : content/media/compiledtest/TestAudioMixer.cpp => dom/media/compiledtest/TestAudioMixer.cpp rename : content/media/compiledtest/moz.build => dom/media/compiledtest/moz.build rename : content/media/directshow/AudioSinkFilter.cpp => dom/media/directshow/AudioSinkFilter.cpp rename : content/media/directshow/AudioSinkFilter.h => dom/media/directshow/AudioSinkFilter.h rename : content/media/directshow/AudioSinkInputPin.cpp => dom/media/directshow/AudioSinkInputPin.cpp rename : content/media/directshow/AudioSinkInputPin.h => dom/media/directshow/AudioSinkInputPin.h rename : content/media/directshow/DirectShowDecoder.cpp => dom/media/directshow/DirectShowDecoder.cpp rename : content/media/directshow/DirectShowDecoder.h => dom/media/directshow/DirectShowDecoder.h rename : content/media/directshow/DirectShowReader.cpp => dom/media/directshow/DirectShowReader.cpp rename : content/media/directshow/DirectShowReader.h => dom/media/directshow/DirectShowReader.h rename : content/media/directshow/DirectShowUtils.cpp => dom/media/directshow/DirectShowUtils.cpp rename : content/media/directshow/DirectShowUtils.h => dom/media/directshow/DirectShowUtils.h rename : content/media/directshow/SampleSink.cpp => dom/media/directshow/SampleSink.cpp rename : content/media/directshow/SampleSink.h => dom/media/directshow/SampleSink.h rename : content/media/directshow/SourceFilter.cpp => dom/media/directshow/SourceFilter.cpp rename : content/media/directshow/SourceFilter.h => dom/media/directshow/SourceFilter.h rename : content/media/directshow/moz.build => dom/media/directshow/moz.build rename : content/media/eme/CDMCallbackProxy.cpp => dom/media/eme/CDMCallbackProxy.cpp rename : content/media/eme/CDMCallbackProxy.h => dom/media/eme/CDMCallbackProxy.h rename : content/media/eme/CDMCaps.cpp => dom/media/eme/CDMCaps.cpp rename : content/media/eme/CDMCaps.h => dom/media/eme/CDMCaps.h rename : content/media/eme/CDMProxy.cpp => dom/media/eme/CDMProxy.cpp rename : content/media/eme/CDMProxy.h => dom/media/eme/CDMProxy.h rename : content/media/eme/EMELog.cpp => dom/media/eme/EMELog.cpp rename : content/media/eme/EMELog.h => dom/media/eme/EMELog.h rename : content/media/eme/MediaEncryptedEvent.cpp => dom/media/eme/MediaEncryptedEvent.cpp rename : content/media/eme/MediaEncryptedEvent.h => dom/media/eme/MediaEncryptedEvent.h rename : content/media/eme/MediaKeyError.cpp => dom/media/eme/MediaKeyError.cpp rename : content/media/eme/MediaKeyError.h => dom/media/eme/MediaKeyError.h rename : content/media/eme/MediaKeyMessageEvent.cpp => dom/media/eme/MediaKeyMessageEvent.cpp rename : content/media/eme/MediaKeyMessageEvent.h => dom/media/eme/MediaKeyMessageEvent.h rename : content/media/eme/MediaKeySession.cpp => dom/media/eme/MediaKeySession.cpp rename : content/media/eme/MediaKeySession.h => dom/media/eme/MediaKeySession.h rename : content/media/eme/MediaKeys.cpp => dom/media/eme/MediaKeys.cpp rename : content/media/eme/MediaKeys.h => dom/media/eme/MediaKeys.h rename : content/media/eme/moz.build => dom/media/eme/moz.build rename : content/media/encoder/ContainerWriter.h => dom/media/encoder/ContainerWriter.h rename : content/media/encoder/EncodedFrameContainer.h => dom/media/encoder/EncodedFrameContainer.h rename : content/media/encoder/MediaEncoder.cpp => dom/media/encoder/MediaEncoder.cpp rename : content/media/encoder/MediaEncoder.h => dom/media/encoder/MediaEncoder.h rename : content/media/encoder/OmxTrackEncoder.cpp => dom/media/encoder/OmxTrackEncoder.cpp rename : content/media/encoder/OmxTrackEncoder.h => dom/media/encoder/OmxTrackEncoder.h rename : content/media/encoder/OpusTrackEncoder.cpp => dom/media/encoder/OpusTrackEncoder.cpp rename : content/media/encoder/OpusTrackEncoder.h => dom/media/encoder/OpusTrackEncoder.h rename : content/media/encoder/TrackEncoder.cpp => dom/media/encoder/TrackEncoder.cpp rename : content/media/encoder/TrackEncoder.h => dom/media/encoder/TrackEncoder.h rename : content/media/encoder/TrackMetadataBase.h => dom/media/encoder/TrackMetadataBase.h rename : content/media/encoder/VP8TrackEncoder.cpp => dom/media/encoder/VP8TrackEncoder.cpp rename : content/media/encoder/VP8TrackEncoder.h => dom/media/encoder/VP8TrackEncoder.h rename : content/media/encoder/VorbisTrackEncoder.cpp => dom/media/encoder/VorbisTrackEncoder.cpp rename : content/media/encoder/VorbisTrackEncoder.h => dom/media/encoder/VorbisTrackEncoder.h rename : content/media/encoder/fmp4_muxer/AMRBox.cpp => dom/media/encoder/fmp4_muxer/AMRBox.cpp rename : content/media/encoder/fmp4_muxer/AMRBox.h => dom/media/encoder/fmp4_muxer/AMRBox.h rename : content/media/encoder/fmp4_muxer/AVCBox.cpp => dom/media/encoder/fmp4_muxer/AVCBox.cpp rename : content/media/encoder/fmp4_muxer/AVCBox.h => dom/media/encoder/fmp4_muxer/AVCBox.h rename : content/media/encoder/fmp4_muxer/ISOControl.cpp => dom/media/encoder/fmp4_muxer/ISOControl.cpp rename : content/media/encoder/fmp4_muxer/ISOControl.h => dom/media/encoder/fmp4_muxer/ISOControl.h rename : content/media/encoder/fmp4_muxer/ISOMediaBoxes.cpp => dom/media/encoder/fmp4_muxer/ISOMediaBoxes.cpp rename : content/media/encoder/fmp4_muxer/ISOMediaBoxes.h => dom/media/encoder/fmp4_muxer/ISOMediaBoxes.h rename : content/media/encoder/fmp4_muxer/ISOMediaWriter.cpp => dom/media/encoder/fmp4_muxer/ISOMediaWriter.cpp rename : content/media/encoder/fmp4_muxer/ISOMediaWriter.h => dom/media/encoder/fmp4_muxer/ISOMediaWriter.h rename : content/media/encoder/fmp4_muxer/ISOTrackMetadata.h => dom/media/encoder/fmp4_muxer/ISOTrackMetadata.h rename : content/media/encoder/fmp4_muxer/MP4ESDS.cpp => dom/media/encoder/fmp4_muxer/MP4ESDS.cpp rename : content/media/encoder/fmp4_muxer/MP4ESDS.h => dom/media/encoder/fmp4_muxer/MP4ESDS.h rename : content/media/encoder/fmp4_muxer/MuxerOperation.h => dom/media/encoder/fmp4_muxer/MuxerOperation.h rename : content/media/encoder/fmp4_muxer/moz.build => dom/media/encoder/fmp4_muxer/moz.build rename : content/media/encoder/moz.build => dom/media/encoder/moz.build rename : content/media/fmp4/BlankDecoderModule.cpp => dom/media/fmp4/BlankDecoderModule.cpp rename : content/media/fmp4/MP4Decoder.cpp => dom/media/fmp4/MP4Decoder.cpp rename : content/media/fmp4/MP4Decoder.h => dom/media/fmp4/MP4Decoder.h rename : content/media/fmp4/MP4Reader.cpp => dom/media/fmp4/MP4Reader.cpp rename : content/media/fmp4/MP4Reader.h => dom/media/fmp4/MP4Reader.h rename : content/media/fmp4/PlatformDecoderModule.cpp => dom/media/fmp4/PlatformDecoderModule.cpp rename : content/media/fmp4/PlatformDecoderModule.h => dom/media/fmp4/PlatformDecoderModule.h rename : content/media/fmp4/android/AndroidDecoderModule.cpp => dom/media/fmp4/android/AndroidDecoderModule.cpp rename : content/media/fmp4/android/AndroidDecoderModule.h => dom/media/fmp4/android/AndroidDecoderModule.h rename : content/media/fmp4/apple/AppleATDecoder.cpp => dom/media/fmp4/apple/AppleATDecoder.cpp rename : content/media/fmp4/apple/AppleATDecoder.h => dom/media/fmp4/apple/AppleATDecoder.h rename : content/media/fmp4/apple/AppleCMFunctions.h => dom/media/fmp4/apple/AppleCMFunctions.h rename : content/media/fmp4/apple/AppleCMLinker.cpp => dom/media/fmp4/apple/AppleCMLinker.cpp rename : content/media/fmp4/apple/AppleCMLinker.h => dom/media/fmp4/apple/AppleCMLinker.h rename : content/media/fmp4/apple/AppleDecoderModule.cpp => dom/media/fmp4/apple/AppleDecoderModule.cpp rename : content/media/fmp4/apple/AppleDecoderModule.h => dom/media/fmp4/apple/AppleDecoderModule.h rename : content/media/fmp4/apple/AppleUtils.cpp => dom/media/fmp4/apple/AppleUtils.cpp rename : content/media/fmp4/apple/AppleUtils.h => dom/media/fmp4/apple/AppleUtils.h rename : content/media/fmp4/apple/AppleVDADecoder.cpp => dom/media/fmp4/apple/AppleVDADecoder.cpp rename : content/media/fmp4/apple/AppleVDADecoder.h => dom/media/fmp4/apple/AppleVDADecoder.h rename : content/media/fmp4/apple/AppleVDAFunctions.h => dom/media/fmp4/apple/AppleVDAFunctions.h rename : content/media/fmp4/apple/AppleVDALinker.cpp => dom/media/fmp4/apple/AppleVDALinker.cpp rename : content/media/fmp4/apple/AppleVDALinker.h => dom/media/fmp4/apple/AppleVDALinker.h rename : content/media/fmp4/apple/AppleVTDecoder.cpp => dom/media/fmp4/apple/AppleVTDecoder.cpp rename : content/media/fmp4/apple/AppleVTDecoder.h => dom/media/fmp4/apple/AppleVTDecoder.h rename : content/media/fmp4/apple/AppleVTFunctions.h => dom/media/fmp4/apple/AppleVTFunctions.h rename : content/media/fmp4/apple/AppleVTLinker.cpp => dom/media/fmp4/apple/AppleVTLinker.cpp rename : content/media/fmp4/apple/AppleVTLinker.h => dom/media/fmp4/apple/AppleVTLinker.h rename : content/media/fmp4/apple/ReorderQueue.h => dom/media/fmp4/apple/ReorderQueue.h rename : content/media/fmp4/apple/VideoDecodeAcceleration/VDADecoder.h => dom/media/fmp4/apple/VideoDecodeAcceleration/VDADecoder.h rename : content/media/fmp4/apple/VideoToolbox/VideoToolbox.h => dom/media/fmp4/apple/VideoToolbox/VideoToolbox.h rename : content/media/fmp4/eme/EMEAudioDecoder.cpp => dom/media/fmp4/eme/EMEAudioDecoder.cpp rename : content/media/fmp4/eme/EMEAudioDecoder.h => dom/media/fmp4/eme/EMEAudioDecoder.h rename : content/media/fmp4/eme/EMEDecoderModule.cpp => dom/media/fmp4/eme/EMEDecoderModule.cpp rename : content/media/fmp4/eme/EMEDecoderModule.h => dom/media/fmp4/eme/EMEDecoderModule.h rename : content/media/fmp4/eme/EMEH264Decoder.cpp => dom/media/fmp4/eme/EMEH264Decoder.cpp rename : content/media/fmp4/eme/EMEH264Decoder.h => dom/media/fmp4/eme/EMEH264Decoder.h rename : content/media/fmp4/eme/moz.build => dom/media/fmp4/eme/moz.build rename : content/media/fmp4/ffmpeg/FFmpegAudioDecoder.cpp => dom/media/fmp4/ffmpeg/FFmpegAudioDecoder.cpp rename : content/media/fmp4/ffmpeg/FFmpegAudioDecoder.h => dom/media/fmp4/ffmpeg/FFmpegAudioDecoder.h rename : content/media/fmp4/ffmpeg/FFmpegDataDecoder.cpp => dom/media/fmp4/ffmpeg/FFmpegDataDecoder.cpp rename : content/media/fmp4/ffmpeg/FFmpegDataDecoder.h => dom/media/fmp4/ffmpeg/FFmpegDataDecoder.h rename : content/media/fmp4/ffmpeg/FFmpegDecoderModule.cpp => dom/media/fmp4/ffmpeg/FFmpegDecoderModule.cpp rename : content/media/fmp4/ffmpeg/FFmpegDecoderModule.h => dom/media/fmp4/ffmpeg/FFmpegDecoderModule.h rename : content/media/fmp4/ffmpeg/FFmpegFunctionList.h => dom/media/fmp4/ffmpeg/FFmpegFunctionList.h rename : content/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp => dom/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp rename : content/media/fmp4/ffmpeg/FFmpegH264Decoder.h => dom/media/fmp4/ffmpeg/FFmpegH264Decoder.h rename : content/media/fmp4/ffmpeg/FFmpegLibs.h => dom/media/fmp4/ffmpeg/FFmpegLibs.h rename : content/media/fmp4/ffmpeg/FFmpegLog.cpp => dom/media/fmp4/ffmpeg/FFmpegLog.cpp rename : content/media/fmp4/ffmpeg/FFmpegLog.h => dom/media/fmp4/ffmpeg/FFmpegLog.h rename : content/media/fmp4/ffmpeg/FFmpegRuntimeLinker.cpp => dom/media/fmp4/ffmpeg/FFmpegRuntimeLinker.cpp rename : content/media/fmp4/ffmpeg/FFmpegRuntimeLinker.h => dom/media/fmp4/ffmpeg/FFmpegRuntimeLinker.h rename : content/media/fmp4/ffmpeg/README_mozilla => dom/media/fmp4/ffmpeg/README_mozilla rename : content/media/fmp4/ffmpeg/libav53/include/COPYING.LGPLv2.1 => dom/media/fmp4/ffmpeg/libav53/include/COPYING.LGPLv2.1 rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/avcodec.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/avcodec.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/avfft.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/avfft.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/dxva2.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/dxva2.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/old_codec_ids.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/old_codec_ids.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/opt.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/opt.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/vaapi.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/vaapi.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/vda.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/vda.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/vdpau.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/vdpau.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/version.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/version.h rename : content/media/fmp4/ffmpeg/libav53/include/libavcodec/xvmc.h => dom/media/fmp4/ffmpeg/libav53/include/libavcodec/xvmc.h rename : content/media/fmp4/ffmpeg/libav53/include/libavformat/avformat.h => dom/media/fmp4/ffmpeg/libav53/include/libavformat/avformat.h rename : content/media/fmp4/ffmpeg/libav53/include/libavformat/avio.h => dom/media/fmp4/ffmpeg/libav53/include/libavformat/avio.h rename : content/media/fmp4/ffmpeg/libav53/include/libavformat/version.h => dom/media/fmp4/ffmpeg/libav53/include/libavformat/version.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/adler32.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/adler32.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/aes.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/aes.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/attributes.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/attributes.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/audio_fifo.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/audio_fifo.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/audioconvert.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/audioconvert.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/avassert.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/avassert.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/avconfig.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/avconfig.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/avstring.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/avstring.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/avutil.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/avutil.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/base64.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/base64.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/blowfish.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/blowfish.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/bprint.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/bprint.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/bswap.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/bswap.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/common.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/common.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/cpu.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/cpu.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/crc.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/crc.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/dict.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/dict.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/error.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/error.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/eval.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/eval.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/fifo.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/fifo.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/file.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/file.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/imgutils.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/imgutils.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/intfloat.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/intfloat.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/intfloat_readwrite.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/intfloat_readwrite.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/intreadwrite.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/intreadwrite.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/lfg.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/lfg.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/log.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/log.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/lzo.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/lzo.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/mathematics.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/mathematics.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/md5.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/md5.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/mem.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/mem.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/old_pix_fmts.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/old_pix_fmts.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/opt.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/opt.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/parseutils.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/parseutils.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/pixdesc.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/pixdesc.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/pixfmt.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/pixfmt.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/random_seed.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/random_seed.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/rational.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/rational.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/samplefmt.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/samplefmt.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/sha.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/sha.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/time.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/time.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/timecode.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/timecode.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/timestamp.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/timestamp.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/version.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/version.h rename : content/media/fmp4/ffmpeg/libav53/include/libavutil/xtea.h => dom/media/fmp4/ffmpeg/libav53/include/libavutil/xtea.h rename : content/media/fmp4/ffmpeg/libav53/moz.build => dom/media/fmp4/ffmpeg/libav53/moz.build rename : content/media/fmp4/ffmpeg/libav54/include/COPYING.LGPLv2.1 => dom/media/fmp4/ffmpeg/libav54/include/COPYING.LGPLv2.1 rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/avcodec.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/avcodec.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/avfft.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/avfft.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/dxva2.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/dxva2.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/old_codec_ids.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/old_codec_ids.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/vaapi.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/vaapi.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/vda.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/vda.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/vdpau.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/vdpau.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/version.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/version.h rename : content/media/fmp4/ffmpeg/libav54/include/libavcodec/xvmc.h => dom/media/fmp4/ffmpeg/libav54/include/libavcodec/xvmc.h rename : content/media/fmp4/ffmpeg/libav54/include/libavformat/avformat.h => dom/media/fmp4/ffmpeg/libav54/include/libavformat/avformat.h rename : content/media/fmp4/ffmpeg/libav54/include/libavformat/avio.h => dom/media/fmp4/ffmpeg/libav54/include/libavformat/avio.h rename : content/media/fmp4/ffmpeg/libav54/include/libavformat/version.h => dom/media/fmp4/ffmpeg/libav54/include/libavformat/version.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/adler32.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/adler32.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/aes.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/aes.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/attributes.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/attributes.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/audio_fifo.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/audio_fifo.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/audioconvert.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/audioconvert.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/avassert.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/avassert.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/avconfig.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/avconfig.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/avstring.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/avstring.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/avutil.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/avutil.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/base64.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/base64.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/blowfish.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/blowfish.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/bswap.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/bswap.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/channel_layout.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/channel_layout.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/common.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/common.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/cpu.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/cpu.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/crc.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/crc.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/dict.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/dict.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/error.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/error.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/eval.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/eval.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/fifo.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/fifo.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/file.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/file.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/imgutils.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/imgutils.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/intfloat.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/intfloat.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/intfloat_readwrite.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/intfloat_readwrite.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/intreadwrite.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/intreadwrite.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/lfg.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/lfg.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/log.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/log.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/lzo.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/lzo.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/mathematics.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/mathematics.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/md5.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/md5.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/mem.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/mem.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/old_pix_fmts.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/old_pix_fmts.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/opt.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/opt.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/parseutils.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/parseutils.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/pixdesc.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/pixdesc.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/pixfmt.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/pixfmt.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/random_seed.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/random_seed.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/rational.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/rational.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/samplefmt.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/samplefmt.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/sha.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/sha.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/time.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/time.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/version.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/version.h rename : content/media/fmp4/ffmpeg/libav54/include/libavutil/xtea.h => dom/media/fmp4/ffmpeg/libav54/include/libavutil/xtea.h rename : content/media/fmp4/ffmpeg/libav54/moz.build => dom/media/fmp4/ffmpeg/libav54/moz.build rename : content/media/fmp4/ffmpeg/libav55/include/COPYING.LGPLv2.1 => dom/media/fmp4/ffmpeg/libav55/include/COPYING.LGPLv2.1 rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/avcodec.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/avcodec.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/avfft.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/avfft.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/dxva2.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/dxva2.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/vaapi.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/vaapi.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/vda.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/vda.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/vdpau.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/vdpau.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/version.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/version.h rename : content/media/fmp4/ffmpeg/libav55/include/libavcodec/xvmc.h => dom/media/fmp4/ffmpeg/libav55/include/libavcodec/xvmc.h rename : content/media/fmp4/ffmpeg/libav55/include/libavformat/avformat.h => dom/media/fmp4/ffmpeg/libav55/include/libavformat/avformat.h rename : content/media/fmp4/ffmpeg/libav55/include/libavformat/avio.h => dom/media/fmp4/ffmpeg/libav55/include/libavformat/avio.h rename : content/media/fmp4/ffmpeg/libav55/include/libavformat/version.h => dom/media/fmp4/ffmpeg/libav55/include/libavformat/version.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/adler32.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/adler32.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/aes.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/aes.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/attributes.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/attributes.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/audio_fifo.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/audio_fifo.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/audioconvert.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/audioconvert.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/avassert.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/avassert.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/avconfig.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/avconfig.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/avstring.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/avstring.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/avutil.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/avutil.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/base64.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/base64.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/blowfish.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/blowfish.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/bswap.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/bswap.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/buffer.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/buffer.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/channel_layout.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/channel_layout.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/common.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/common.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/cpu.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/cpu.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/crc.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/crc.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/dict.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/dict.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/downmix_info.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/downmix_info.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/error.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/error.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/eval.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/eval.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/fifo.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/fifo.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/file.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/file.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/frame.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/frame.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/hmac.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/hmac.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/imgutils.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/imgutils.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/intfloat.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/intfloat.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/intreadwrite.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/intreadwrite.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/lfg.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/lfg.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/log.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/log.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/lzo.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/lzo.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/macros.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/macros.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/mathematics.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/mathematics.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/md5.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/md5.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/mem.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/mem.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/old_pix_fmts.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/old_pix_fmts.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/opt.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/opt.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/parseutils.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/parseutils.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/pixdesc.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/pixdesc.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/pixfmt.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/pixfmt.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/random_seed.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/random_seed.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/rational.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/rational.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/samplefmt.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/samplefmt.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/sha.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/sha.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/stereo3d.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/stereo3d.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/time.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/time.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/version.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/version.h rename : content/media/fmp4/ffmpeg/libav55/include/libavutil/xtea.h => dom/media/fmp4/ffmpeg/libav55/include/libavutil/xtea.h rename : content/media/fmp4/ffmpeg/libav55/moz.build => dom/media/fmp4/ffmpeg/libav55/moz.build rename : content/media/fmp4/gonk/GonkAudioDecoderManager.cpp => dom/media/fmp4/gonk/GonkAudioDecoderManager.cpp rename : content/media/fmp4/gonk/GonkAudioDecoderManager.h => dom/media/fmp4/gonk/GonkAudioDecoderManager.h rename : content/media/fmp4/gonk/GonkDecoderModule.cpp => dom/media/fmp4/gonk/GonkDecoderModule.cpp rename : content/media/fmp4/gonk/GonkDecoderModule.h => dom/media/fmp4/gonk/GonkDecoderModule.h rename : content/media/fmp4/gonk/GonkMediaDataDecoder.cpp => dom/media/fmp4/gonk/GonkMediaDataDecoder.cpp rename : content/media/fmp4/gonk/GonkMediaDataDecoder.h => dom/media/fmp4/gonk/GonkMediaDataDecoder.h rename : content/media/fmp4/gonk/GonkVideoDecoderManager.cpp => dom/media/fmp4/gonk/GonkVideoDecoderManager.cpp rename : content/media/fmp4/gonk/GonkVideoDecoderManager.h => dom/media/fmp4/gonk/GonkVideoDecoderManager.h rename : content/media/fmp4/gonk/moz.build => dom/media/fmp4/gonk/moz.build rename : content/media/fmp4/moz.build => dom/media/fmp4/moz.build rename : content/media/fmp4/wmf/MFTDecoder.cpp => dom/media/fmp4/wmf/MFTDecoder.cpp rename : content/media/fmp4/wmf/MFTDecoder.h => dom/media/fmp4/wmf/MFTDecoder.h rename : content/media/fmp4/wmf/WMFAudioMFTManager.cpp => dom/media/fmp4/wmf/WMFAudioMFTManager.cpp rename : content/media/fmp4/wmf/WMFAudioMFTManager.h => dom/media/fmp4/wmf/WMFAudioMFTManager.h rename : content/media/fmp4/wmf/WMFDecoderModule.cpp => dom/media/fmp4/wmf/WMFDecoderModule.cpp rename : content/media/fmp4/wmf/WMFDecoderModule.h => dom/media/fmp4/wmf/WMFDecoderModule.h rename : content/media/fmp4/wmf/WMFMediaDataDecoder.cpp => dom/media/fmp4/wmf/WMFMediaDataDecoder.cpp rename : content/media/fmp4/wmf/WMFMediaDataDecoder.h => dom/media/fmp4/wmf/WMFMediaDataDecoder.h rename : content/media/fmp4/wmf/WMFVideoMFTManager.cpp => dom/media/fmp4/wmf/WMFVideoMFTManager.cpp rename : content/media/fmp4/wmf/WMFVideoMFTManager.h => dom/media/fmp4/wmf/WMFVideoMFTManager.h rename : content/media/fmp4/wmf/moz.build => dom/media/fmp4/wmf/moz.build rename : content/media/gmp/GMPAudioDecoderChild.cpp => dom/media/gmp/GMPAudioDecoderChild.cpp rename : content/media/gmp/GMPAudioDecoderChild.h => dom/media/gmp/GMPAudioDecoderChild.h rename : content/media/gmp/GMPAudioDecoderParent.cpp => dom/media/gmp/GMPAudioDecoderParent.cpp rename : content/media/gmp/GMPAudioDecoderParent.h => dom/media/gmp/GMPAudioDecoderParent.h rename : content/media/gmp/GMPAudioDecoderProxy.h => dom/media/gmp/GMPAudioDecoderProxy.h rename : content/media/gmp/GMPAudioHost.cpp => dom/media/gmp/GMPAudioHost.cpp rename : content/media/gmp/GMPAudioHost.h => dom/media/gmp/GMPAudioHost.h rename : content/media/gmp/GMPCallbackBase.h => dom/media/gmp/GMPCallbackBase.h rename : content/media/gmp/GMPChild.cpp => dom/media/gmp/GMPChild.cpp rename : content/media/gmp/GMPChild.h => dom/media/gmp/GMPChild.h rename : content/media/gmp/GMPDecryptorChild.cpp => dom/media/gmp/GMPDecryptorChild.cpp rename : content/media/gmp/GMPDecryptorChild.h => dom/media/gmp/GMPDecryptorChild.h rename : content/media/gmp/GMPDecryptorParent.cpp => dom/media/gmp/GMPDecryptorParent.cpp rename : content/media/gmp/GMPDecryptorParent.h => dom/media/gmp/GMPDecryptorParent.h rename : content/media/gmp/GMPDecryptorProxy.h => dom/media/gmp/GMPDecryptorProxy.h rename : content/media/gmp/GMPEncryptedBufferDataImpl.cpp => dom/media/gmp/GMPEncryptedBufferDataImpl.cpp rename : content/media/gmp/GMPEncryptedBufferDataImpl.h => dom/media/gmp/GMPEncryptedBufferDataImpl.h rename : content/media/gmp/GMPMessageUtils.h => dom/media/gmp/GMPMessageUtils.h rename : content/media/gmp/GMPParent.cpp => dom/media/gmp/GMPParent.cpp rename : content/media/gmp/GMPParent.h => dom/media/gmp/GMPParent.h rename : content/media/gmp/GMPPlatform.cpp => dom/media/gmp/GMPPlatform.cpp rename : content/media/gmp/GMPPlatform.h => dom/media/gmp/GMPPlatform.h rename : content/media/gmp/GMPProcessChild.cpp => dom/media/gmp/GMPProcessChild.cpp rename : content/media/gmp/GMPProcessChild.h => dom/media/gmp/GMPProcessChild.h rename : content/media/gmp/GMPProcessParent.cpp => dom/media/gmp/GMPProcessParent.cpp rename : content/media/gmp/GMPProcessParent.h => dom/media/gmp/GMPProcessParent.h rename : content/media/gmp/GMPService.cpp => dom/media/gmp/GMPService.cpp rename : content/media/gmp/GMPService.h => dom/media/gmp/GMPService.h rename : content/media/gmp/GMPSharedMemManager.cpp => dom/media/gmp/GMPSharedMemManager.cpp rename : content/media/gmp/GMPSharedMemManager.h => dom/media/gmp/GMPSharedMemManager.h rename : content/media/gmp/GMPStorageChild.cpp => dom/media/gmp/GMPStorageChild.cpp rename : content/media/gmp/GMPStorageChild.h => dom/media/gmp/GMPStorageChild.h rename : content/media/gmp/GMPStorageParent.cpp => dom/media/gmp/GMPStorageParent.cpp rename : content/media/gmp/GMPStorageParent.h => dom/media/gmp/GMPStorageParent.h rename : content/media/gmp/GMPTimerChild.cpp => dom/media/gmp/GMPTimerChild.cpp rename : content/media/gmp/GMPTimerChild.h => dom/media/gmp/GMPTimerChild.h rename : content/media/gmp/GMPTimerParent.cpp => dom/media/gmp/GMPTimerParent.cpp rename : content/media/gmp/GMPTimerParent.h => dom/media/gmp/GMPTimerParent.h rename : content/media/gmp/GMPTypes.ipdlh => dom/media/gmp/GMPTypes.ipdlh rename : content/media/gmp/GMPVideoDecoderChild.cpp => dom/media/gmp/GMPVideoDecoderChild.cpp rename : content/media/gmp/GMPVideoDecoderChild.h => dom/media/gmp/GMPVideoDecoderChild.h rename : content/media/gmp/GMPVideoDecoderParent.cpp => dom/media/gmp/GMPVideoDecoderParent.cpp rename : content/media/gmp/GMPVideoDecoderParent.h => dom/media/gmp/GMPVideoDecoderParent.h rename : content/media/gmp/GMPVideoDecoderProxy.h => dom/media/gmp/GMPVideoDecoderProxy.h rename : content/media/gmp/GMPVideoEncodedFrameImpl.cpp => dom/media/gmp/GMPVideoEncodedFrameImpl.cpp rename : content/media/gmp/GMPVideoEncodedFrameImpl.h => dom/media/gmp/GMPVideoEncodedFrameImpl.h rename : content/media/gmp/GMPVideoEncoderChild.cpp => dom/media/gmp/GMPVideoEncoderChild.cpp rename : content/media/gmp/GMPVideoEncoderChild.h => dom/media/gmp/GMPVideoEncoderChild.h rename : content/media/gmp/GMPVideoEncoderParent.cpp => dom/media/gmp/GMPVideoEncoderParent.cpp rename : content/media/gmp/GMPVideoEncoderParent.h => dom/media/gmp/GMPVideoEncoderParent.h rename : content/media/gmp/GMPVideoEncoderProxy.h => dom/media/gmp/GMPVideoEncoderProxy.h rename : content/media/gmp/GMPVideoHost.cpp => dom/media/gmp/GMPVideoHost.cpp rename : content/media/gmp/GMPVideoHost.h => dom/media/gmp/GMPVideoHost.h rename : content/media/gmp/GMPVideoPlaneImpl.cpp => dom/media/gmp/GMPVideoPlaneImpl.cpp rename : content/media/gmp/GMPVideoPlaneImpl.h => dom/media/gmp/GMPVideoPlaneImpl.h rename : content/media/gmp/GMPVideoi420FrameImpl.cpp => dom/media/gmp/GMPVideoi420FrameImpl.cpp rename : content/media/gmp/GMPVideoi420FrameImpl.h => dom/media/gmp/GMPVideoi420FrameImpl.h rename : content/media/gmp/PGMP.ipdl => dom/media/gmp/PGMP.ipdl rename : content/media/gmp/PGMPAudioDecoder.ipdl => dom/media/gmp/PGMPAudioDecoder.ipdl rename : content/media/gmp/PGMPDecryptor.ipdl => dom/media/gmp/PGMPDecryptor.ipdl rename : content/media/gmp/PGMPStorage.ipdl => dom/media/gmp/PGMPStorage.ipdl rename : content/media/gmp/PGMPTimer.ipdl => dom/media/gmp/PGMPTimer.ipdl rename : content/media/gmp/PGMPVideoDecoder.ipdl => dom/media/gmp/PGMPVideoDecoder.ipdl rename : content/media/gmp/PGMPVideoEncoder.ipdl => dom/media/gmp/PGMPVideoEncoder.ipdl rename : content/media/gmp/README.txt => dom/media/gmp/README.txt rename : content/media/gmp/gmp-api/gmp-async-shutdown.h => dom/media/gmp/gmp-api/gmp-async-shutdown.h rename : content/media/gmp/gmp-api/gmp-audio-codec.h => dom/media/gmp/gmp-api/gmp-audio-codec.h rename : content/media/gmp/gmp-api/gmp-audio-decode.h => dom/media/gmp/gmp-api/gmp-audio-decode.h rename : content/media/gmp/gmp-api/gmp-audio-host.h => dom/media/gmp/gmp-api/gmp-audio-host.h rename : content/media/gmp/gmp-api/gmp-audio-samples.h => dom/media/gmp/gmp-api/gmp-audio-samples.h rename : content/media/gmp/gmp-api/gmp-decryption.h => dom/media/gmp/gmp-api/gmp-decryption.h rename : content/media/gmp/gmp-api/gmp-entrypoints.h => dom/media/gmp/gmp-api/gmp-entrypoints.h rename : content/media/gmp/gmp-api/gmp-errors.h => dom/media/gmp/gmp-api/gmp-errors.h rename : content/media/gmp/gmp-api/gmp-platform.h => dom/media/gmp/gmp-api/gmp-platform.h rename : content/media/gmp/gmp-api/gmp-storage.h => dom/media/gmp/gmp-api/gmp-storage.h rename : content/media/gmp/gmp-api/gmp-video-codec.h => dom/media/gmp/gmp-api/gmp-video-codec.h rename : content/media/gmp/gmp-api/gmp-video-decode.h => dom/media/gmp/gmp-api/gmp-video-decode.h rename : content/media/gmp/gmp-api/gmp-video-encode.h => dom/media/gmp/gmp-api/gmp-video-encode.h rename : content/media/gmp/gmp-api/gmp-video-frame-encoded.h => dom/media/gmp/gmp-api/gmp-video-frame-encoded.h rename : content/media/gmp/gmp-api/gmp-video-frame-i420.h => dom/media/gmp/gmp-api/gmp-video-frame-i420.h rename : content/media/gmp/gmp-api/gmp-video-frame.h => dom/media/gmp/gmp-api/gmp-video-frame.h rename : content/media/gmp/gmp-api/gmp-video-host.h => dom/media/gmp/gmp-api/gmp-video-host.h rename : content/media/gmp/gmp-api/gmp-video-plane.h => dom/media/gmp/gmp-api/gmp-video-plane.h rename : content/media/gmp/moz.build => dom/media/gmp/moz.build rename : content/media/gmp/mozIGeckoMediaPluginService.idl => dom/media/gmp/mozIGeckoMediaPluginService.idl rename : content/media/gmp/rlz/COPYING => dom/media/gmp/rlz/COPYING rename : content/media/gmp/rlz/README.mozilla => dom/media/gmp/rlz/README.mozilla rename : content/media/gmp/rlz/base/memory/scoped_ptr.h => dom/media/gmp/rlz/base/memory/scoped_ptr.h rename : content/media/gmp/rlz/base/string16.h => dom/media/gmp/rlz/base/string16.h rename : content/media/gmp/rlz/lib/assert.h => dom/media/gmp/rlz/lib/assert.h rename : content/media/gmp/rlz/lib/machine_id.h => dom/media/gmp/rlz/lib/machine_id.h rename : content/media/gmp/rlz/lib/string_utils.cc => dom/media/gmp/rlz/lib/string_utils.cc rename : content/media/gmp/rlz/lib/string_utils.h => dom/media/gmp/rlz/lib/string_utils.h rename : content/media/gmp/rlz/moz.build => dom/media/gmp/rlz/moz.build rename : content/media/gmp/rlz/win/lib/machine_id_win.cc => dom/media/gmp/rlz/win/lib/machine_id_win.cc rename : content/media/gstreamer/GStreamerAllocator.cpp => dom/media/gstreamer/GStreamerAllocator.cpp rename : content/media/gstreamer/GStreamerAllocator.h => dom/media/gstreamer/GStreamerAllocator.h rename : content/media/gstreamer/GStreamerDecoder.cpp => dom/media/gstreamer/GStreamerDecoder.cpp rename : content/media/gstreamer/GStreamerDecoder.h => dom/media/gstreamer/GStreamerDecoder.h rename : content/media/gstreamer/GStreamerFormatHelper.cpp => dom/media/gstreamer/GStreamerFormatHelper.cpp rename : content/media/gstreamer/GStreamerFormatHelper.h => dom/media/gstreamer/GStreamerFormatHelper.h rename : content/media/gstreamer/GStreamerFunctionList.h => dom/media/gstreamer/GStreamerFunctionList.h rename : content/media/gstreamer/GStreamerLoader.cpp => dom/media/gstreamer/GStreamerLoader.cpp rename : content/media/gstreamer/GStreamerLoader.h => dom/media/gstreamer/GStreamerLoader.h rename : content/media/gstreamer/GStreamerMozVideoBuffer.cpp => dom/media/gstreamer/GStreamerMozVideoBuffer.cpp rename : content/media/gstreamer/GStreamerMozVideoBuffer.h => dom/media/gstreamer/GStreamerMozVideoBuffer.h rename : content/media/gstreamer/GStreamerReader-0.10.cpp => dom/media/gstreamer/GStreamerReader-0.10.cpp rename : content/media/gstreamer/GStreamerReader.cpp => dom/media/gstreamer/GStreamerReader.cpp rename : content/media/gstreamer/GStreamerReader.h => dom/media/gstreamer/GStreamerReader.h rename : content/media/gstreamer/moz.build => dom/media/gstreamer/moz.build rename : content/media/gtest/MockMediaDecoderOwner.h => dom/media/gtest/MockMediaDecoderOwner.h rename : content/media/gtest/MockMediaResource.cpp => dom/media/gtest/MockMediaResource.cpp rename : content/media/gtest/MockMediaResource.h => dom/media/gtest/MockMediaResource.h rename : content/media/gtest/TestAudioCompactor.cpp => dom/media/gtest/TestAudioCompactor.cpp rename : content/media/gtest/TestGMPCrossOrigin.cpp => dom/media/gtest/TestGMPCrossOrigin.cpp rename : content/media/gtest/TestMP4Reader.cpp => dom/media/gtest/TestMP4Reader.cpp rename : content/media/gtest/TestTrackEncoder.cpp => dom/media/gtest/TestTrackEncoder.cpp rename : content/media/gtest/TestVideoSegment.cpp => dom/media/gtest/TestVideoSegment.cpp rename : content/media/gtest/TestVideoTrackEncoder.cpp => dom/media/gtest/TestVideoTrackEncoder.cpp rename : content/media/gtest/TestVorbisTrackEncoder.cpp => dom/media/gtest/TestVorbisTrackEncoder.cpp rename : content/media/gtest/TestWebMBuffered.cpp => dom/media/gtest/TestWebMBuffered.cpp rename : content/media/gtest/TestWebMWriter.cpp => dom/media/gtest/TestWebMWriter.cpp rename : content/media/gtest/mediasource_test.mp4 => dom/media/gtest/mediasource_test.mp4 rename : content/media/gtest/moz.build => dom/media/gtest/moz.build rename : content/media/gtest/test.webm => dom/media/gtest/test.webm rename : content/media/imagecapture/CaptureTask.cpp => dom/media/imagecapture/CaptureTask.cpp rename : content/media/imagecapture/CaptureTask.h => dom/media/imagecapture/CaptureTask.h rename : content/media/imagecapture/ImageCapture.cpp => dom/media/imagecapture/ImageCapture.cpp rename : content/media/imagecapture/ImageCapture.h => dom/media/imagecapture/ImageCapture.h rename : content/media/imagecapture/moz.build => dom/media/imagecapture/moz.build rename : content/media/mediasource/AsyncEventRunner.h => dom/media/mediasource/AsyncEventRunner.h rename : content/media/mediasource/ContainerParser.cpp => dom/media/mediasource/ContainerParser.cpp rename : content/media/mediasource/ContainerParser.h => dom/media/mediasource/ContainerParser.h rename : content/media/mediasource/MediaSource.cpp => dom/media/mediasource/MediaSource.cpp rename : content/media/mediasource/MediaSource.h => dom/media/mediasource/MediaSource.h rename : content/media/mediasource/MediaSourceDecoder.cpp => dom/media/mediasource/MediaSourceDecoder.cpp rename : content/media/mediasource/MediaSourceDecoder.h => dom/media/mediasource/MediaSourceDecoder.h rename : content/media/mediasource/MediaSourceReader.cpp => dom/media/mediasource/MediaSourceReader.cpp rename : content/media/mediasource/MediaSourceReader.h => dom/media/mediasource/MediaSourceReader.h rename : content/media/mediasource/MediaSourceResource.h => dom/media/mediasource/MediaSourceResource.h rename : content/media/mediasource/MediaSourceUtils.cpp => dom/media/mediasource/MediaSourceUtils.cpp rename : content/media/mediasource/MediaSourceUtils.h => dom/media/mediasource/MediaSourceUtils.h rename : content/media/mediasource/ResourceQueue.h => dom/media/mediasource/ResourceQueue.h rename : content/media/mediasource/SourceBuffer.cpp => dom/media/mediasource/SourceBuffer.cpp rename : content/media/mediasource/SourceBuffer.h => dom/media/mediasource/SourceBuffer.h rename : content/media/mediasource/SourceBufferDecoder.cpp => dom/media/mediasource/SourceBufferDecoder.cpp rename : content/media/mediasource/SourceBufferDecoder.h => dom/media/mediasource/SourceBufferDecoder.h rename : content/media/mediasource/SourceBufferList.cpp => dom/media/mediasource/SourceBufferList.cpp rename : content/media/mediasource/SourceBufferList.h => dom/media/mediasource/SourceBufferList.h rename : content/media/mediasource/SourceBufferResource.cpp => dom/media/mediasource/SourceBufferResource.cpp rename : content/media/mediasource/SourceBufferResource.h => dom/media/mediasource/SourceBufferResource.h rename : content/media/mediasource/TrackBuffer.cpp => dom/media/mediasource/TrackBuffer.cpp rename : content/media/mediasource/TrackBuffer.h => dom/media/mediasource/TrackBuffer.h rename : content/media/mediasource/moz.build => dom/media/mediasource/moz.build rename : content/media/mediasource/test/crashtests/1005366.html => dom/media/mediasource/test/crashtests/1005366.html rename : content/media/mediasource/test/crashtests/1059035.html => dom/media/mediasource/test/crashtests/1059035.html rename : content/media/mediasource/test/crashtests/926665.html => dom/media/mediasource/test/crashtests/926665.html rename : content/media/mediasource/test/crashtests/931388.html => dom/media/mediasource/test/crashtests/931388.html rename : content/media/mediasource/test/crashtests/crashtests.list => dom/media/mediasource/test/crashtests/crashtests.list rename : content/media/mediasource/test/mediasource.js => dom/media/mediasource/test/mediasource.js rename : content/media/mediasource/test/mochitest.ini => dom/media/mediasource/test/mochitest.ini rename : content/media/mediasource/test/seek.webm => dom/media/mediasource/test/seek.webm rename : content/media/mediasource/test/seek.webm^headers^ => dom/media/mediasource/test/seek.webm^headers^ rename : content/media/mediasource/test/seek_lowres.webm => dom/media/mediasource/test/seek_lowres.webm rename : content/media/mediasource/test/seek_lowres.webm^headers^ => dom/media/mediasource/test/seek_lowres.webm^headers^ rename : content/media/mediasource/test/test_BufferedSeek.html => dom/media/mediasource/test/test_BufferedSeek.html rename : content/media/mediasource/test/test_FrameSelection.html => dom/media/mediasource/test/test_FrameSelection.html rename : content/media/mediasource/test/test_HaveMetadataUnbufferedSeek.html => dom/media/mediasource/test/test_HaveMetadataUnbufferedSeek.html rename : content/media/mediasource/test/test_MediaSource.html => dom/media/mediasource/test/test_MediaSource.html rename : content/media/mediasource/test/test_MediaSource_disabled.html => dom/media/mediasource/test/test_MediaSource_disabled.html rename : content/media/mediasource/test/test_SeekableAfterEndOfStream.html => dom/media/mediasource/test/test_SeekableAfterEndOfStream.html rename : content/media/mediasource/test/test_SeekableAfterEndOfStreamSplit.html => dom/media/mediasource/test/test_SeekableAfterEndOfStreamSplit.html rename : content/media/mediasource/test/test_SeekableBeforeEndOfStream.html => dom/media/mediasource/test/test_SeekableBeforeEndOfStream.html rename : content/media/mediasource/test/test_SeekableBeforeEndOfStreamSplit.html => dom/media/mediasource/test/test_SeekableBeforeEndOfStreamSplit.html rename : content/media/mediasource/test/test_SplitAppend.html => dom/media/mediasource/test/test_SplitAppend.html rename : content/media/mediasource/test/test_SplitAppendDelay.html => dom/media/mediasource/test/test_SplitAppendDelay.html rename : content/media/nsIDocumentActivity.h => dom/media/nsIDocumentActivity.h rename : content/media/ogg/OggCodecState.cpp => dom/media/ogg/OggCodecState.cpp rename : content/media/ogg/OggCodecState.h => dom/media/ogg/OggCodecState.h rename : content/media/ogg/OggDecoder.cpp => dom/media/ogg/OggDecoder.cpp rename : content/media/ogg/OggDecoder.h => dom/media/ogg/OggDecoder.h rename : content/media/ogg/OggReader.cpp => dom/media/ogg/OggReader.cpp rename : content/media/ogg/OggReader.h => dom/media/ogg/OggReader.h rename : content/media/ogg/OggWriter.cpp => dom/media/ogg/OggWriter.cpp rename : content/media/ogg/OggWriter.h => dom/media/ogg/OggWriter.h rename : content/media/ogg/OpusParser.cpp => dom/media/ogg/OpusParser.cpp rename : content/media/ogg/OpusParser.h => dom/media/ogg/OpusParser.h rename : content/media/ogg/moz.build => dom/media/ogg/moz.build rename : content/media/omx/AudioOffloadPlayer.cpp => dom/media/omx/AudioOffloadPlayer.cpp rename : content/media/omx/AudioOffloadPlayer.h => dom/media/omx/AudioOffloadPlayer.h rename : content/media/omx/AudioOffloadPlayerBase.h => dom/media/omx/AudioOffloadPlayerBase.h rename : content/media/omx/AudioOutput.cpp => dom/media/omx/AudioOutput.cpp rename : content/media/omx/AudioOutput.h => dom/media/omx/AudioOutput.h rename : content/media/omx/AudioSink.h => dom/media/omx/AudioSink.h rename : content/media/omx/I420ColorConverterHelper.cpp => dom/media/omx/I420ColorConverterHelper.cpp rename : content/media/omx/I420ColorConverterHelper.h => dom/media/omx/I420ColorConverterHelper.h rename : content/media/omx/MPAPI.h => dom/media/omx/MPAPI.h rename : content/media/omx/MediaCodecDecoder.cpp => dom/media/omx/MediaCodecDecoder.cpp rename : content/media/omx/MediaCodecDecoder.h => dom/media/omx/MediaCodecDecoder.h rename : content/media/omx/MediaCodecProxy.cpp => dom/media/omx/MediaCodecProxy.cpp rename : content/media/omx/MediaCodecProxy.h => dom/media/omx/MediaCodecProxy.h rename : content/media/omx/MediaCodecReader.cpp => dom/media/omx/MediaCodecReader.cpp rename : content/media/omx/MediaCodecReader.h => dom/media/omx/MediaCodecReader.h rename : content/media/omx/MediaOmxCommonDecoder.cpp => dom/media/omx/MediaOmxCommonDecoder.cpp rename : content/media/omx/MediaOmxCommonDecoder.h => dom/media/omx/MediaOmxCommonDecoder.h rename : content/media/omx/MediaOmxCommonReader.cpp => dom/media/omx/MediaOmxCommonReader.cpp rename : content/media/omx/MediaOmxCommonReader.h => dom/media/omx/MediaOmxCommonReader.h rename : content/media/omx/MediaOmxDecoder.cpp => dom/media/omx/MediaOmxDecoder.cpp rename : content/media/omx/MediaOmxDecoder.h => dom/media/omx/MediaOmxDecoder.h rename : content/media/omx/MediaOmxReader.cpp => dom/media/omx/MediaOmxReader.cpp rename : content/media/omx/MediaOmxReader.h => dom/media/omx/MediaOmxReader.h rename : content/media/omx/MediaStreamSource.cpp => dom/media/omx/MediaStreamSource.cpp rename : content/media/omx/MediaStreamSource.h => dom/media/omx/MediaStreamSource.h rename : content/media/omx/OMXCodecDescriptorUtil.cpp => dom/media/omx/OMXCodecDescriptorUtil.cpp rename : content/media/omx/OMXCodecDescriptorUtil.h => dom/media/omx/OMXCodecDescriptorUtil.h rename : content/media/omx/OMXCodecProxy.cpp => dom/media/omx/OMXCodecProxy.cpp rename : content/media/omx/OMXCodecProxy.h => dom/media/omx/OMXCodecProxy.h rename : content/media/omx/OMXCodecWrapper.cpp => dom/media/omx/OMXCodecWrapper.cpp rename : content/media/omx/OMXCodecWrapper.h => dom/media/omx/OMXCodecWrapper.h rename : content/media/omx/OmxDecoder.cpp => dom/media/omx/OmxDecoder.cpp rename : content/media/omx/OmxDecoder.h => dom/media/omx/OmxDecoder.h rename : content/media/omx/RtspExtractor.cpp => dom/media/omx/RtspExtractor.cpp rename : content/media/omx/RtspExtractor.h => dom/media/omx/RtspExtractor.h rename : content/media/omx/RtspMediaCodecDecoder.cpp => dom/media/omx/RtspMediaCodecDecoder.cpp rename : content/media/omx/RtspMediaCodecDecoder.h => dom/media/omx/RtspMediaCodecDecoder.h rename : content/media/omx/RtspMediaCodecReader.cpp => dom/media/omx/RtspMediaCodecReader.cpp rename : content/media/omx/RtspMediaCodecReader.h => dom/media/omx/RtspMediaCodecReader.h rename : content/media/omx/RtspOmxDecoder.cpp => dom/media/omx/RtspOmxDecoder.cpp rename : content/media/omx/RtspOmxDecoder.h => dom/media/omx/RtspOmxDecoder.h rename : content/media/omx/RtspOmxReader.cpp => dom/media/omx/RtspOmxReader.cpp rename : content/media/omx/RtspOmxReader.h => dom/media/omx/RtspOmxReader.h rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerClient.cpp => dom/media/omx/mediaresourcemanager/IMediaResourceManagerClient.cpp rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerClient.h => dom/media/omx/mediaresourcemanager/IMediaResourceManagerClient.h rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerDeathNotifier.cpp => dom/media/omx/mediaresourcemanager/IMediaResourceManagerDeathNotifier.cpp rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerDeathNotifier.h => dom/media/omx/mediaresourcemanager/IMediaResourceManagerDeathNotifier.h rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerService.cpp => dom/media/omx/mediaresourcemanager/IMediaResourceManagerService.cpp rename : content/media/omx/mediaresourcemanager/IMediaResourceManagerService.h => dom/media/omx/mediaresourcemanager/IMediaResourceManagerService.h rename : content/media/omx/mediaresourcemanager/MediaResourceHandler.cpp => dom/media/omx/mediaresourcemanager/MediaResourceHandler.cpp rename : content/media/omx/mediaresourcemanager/MediaResourceHandler.h => dom/media/omx/mediaresourcemanager/MediaResourceHandler.h rename : content/media/omx/mediaresourcemanager/MediaResourceManagerClient.cpp => dom/media/omx/mediaresourcemanager/MediaResourceManagerClient.cpp rename : content/media/omx/mediaresourcemanager/MediaResourceManagerClient.h => dom/media/omx/mediaresourcemanager/MediaResourceManagerClient.h rename : content/media/omx/mediaresourcemanager/MediaResourceManagerService.cpp => dom/media/omx/mediaresourcemanager/MediaResourceManagerService.cpp rename : content/media/omx/mediaresourcemanager/MediaResourceManagerService.h => dom/media/omx/mediaresourcemanager/MediaResourceManagerService.h rename : content/media/omx/mediaresourcemanager/moz.build => dom/media/omx/mediaresourcemanager/moz.build rename : content/media/omx/moz.build => dom/media/omx/moz.build rename : content/media/raw/RawDecoder.cpp => dom/media/raw/RawDecoder.cpp rename : content/media/raw/RawDecoder.h => dom/media/raw/RawDecoder.h rename : content/media/raw/RawReader.cpp => dom/media/raw/RawReader.cpp rename : content/media/raw/RawReader.h => dom/media/raw/RawReader.h rename : content/media/raw/RawStructs.h => dom/media/raw/RawStructs.h rename : content/media/raw/moz.build => dom/media/raw/moz.build rename : content/media/systemservices/LoadManager.cpp => dom/media/systemservices/LoadManager.cpp rename : content/media/systemservices/LoadManager.h => dom/media/systemservices/LoadManager.h rename : content/media/systemservices/LoadManagerFactory.cpp => dom/media/systemservices/LoadManagerFactory.cpp rename : content/media/systemservices/LoadManagerFactory.h => dom/media/systemservices/LoadManagerFactory.h rename : content/media/systemservices/LoadMonitor.cpp => dom/media/systemservices/LoadMonitor.cpp rename : content/media/systemservices/LoadMonitor.h => dom/media/systemservices/LoadMonitor.h rename : content/media/systemservices/OSXRunLoopSingleton.cpp => dom/media/systemservices/OSXRunLoopSingleton.cpp rename : content/media/systemservices/OSXRunLoopSingleton.h => dom/media/systemservices/OSXRunLoopSingleton.h rename : content/media/systemservices/OpenSLESProvider.cpp => dom/media/systemservices/OpenSLESProvider.cpp rename : content/media/systemservices/OpenSLESProvider.h => dom/media/systemservices/OpenSLESProvider.h rename : content/media/systemservices/moz.build => dom/media/systemservices/moz.build rename : content/media/test/320x240.ogv => dom/media/test/320x240.ogv rename : content/media/test/320x240.ogv^headers^ => dom/media/test/320x240.ogv^headers^ rename : content/media/test/448636.ogv => dom/media/test/448636.ogv rename : content/media/test/448636.ogv^headers^ => dom/media/test/448636.ogv^headers^ rename : content/media/test/VID_0001.ogg => dom/media/test/VID_0001.ogg rename : content/media/test/VID_0001.ogg^headers^ => dom/media/test/VID_0001.ogg^headers^ rename : content/media/test/allowed.sjs => dom/media/test/allowed.sjs rename : content/media/test/audio-gaps.ogg => dom/media/test/audio-gaps.ogg rename : content/media/test/audio-gaps.ogg^headers^ => dom/media/test/audio-gaps.ogg^headers^ rename : content/media/test/audio-overhang.ogg => dom/media/test/audio-overhang.ogg rename : content/media/test/audio-overhang.ogg^headers^ => dom/media/test/audio-overhang.ogg^headers^ rename : content/media/test/audio.wav => dom/media/test/audio.wav rename : content/media/test/audio.wav^headers^ => dom/media/test/audio.wav^headers^ rename : content/media/test/bad-signature.vtt => dom/media/test/bad-signature.vtt rename : content/media/test/badtags.ogg => dom/media/test/badtags.ogg rename : content/media/test/badtags.ogg^headers^ => dom/media/test/badtags.ogg^headers^ rename : content/media/test/basic.vtt => dom/media/test/basic.vtt rename : content/media/test/beta-phrasebook.ogg => dom/media/test/beta-phrasebook.ogg rename : content/media/test/beta-phrasebook.ogg^headers^ => dom/media/test/beta-phrasebook.ogg^headers^ rename : content/media/test/big.wav => dom/media/test/big.wav rename : content/media/test/big.wav^headers^ => dom/media/test/big.wav^headers^ rename : content/media/test/bogus.duh => dom/media/test/bogus.duh rename : content/media/test/bogus.ogv => dom/media/test/bogus.ogv rename : content/media/test/bogus.ogv^headers^ => dom/media/test/bogus.ogv^headers^ rename : content/media/test/bogus.wav => dom/media/test/bogus.wav rename : content/media/test/bogus.wav^headers^ => dom/media/test/bogus.wav^headers^ rename : content/media/test/bug1066943.webm => dom/media/test/bug1066943.webm rename : content/media/test/bug1066943.webm^headers^ => dom/media/test/bug1066943.webm^headers^ rename : content/media/test/bug461281.ogg => dom/media/test/bug461281.ogg rename : content/media/test/bug461281.ogg^headers^ => dom/media/test/bug461281.ogg^headers^ rename : content/media/test/bug482461-theora.ogv => dom/media/test/bug482461-theora.ogv rename : content/media/test/bug482461-theora.ogv^headers^ => dom/media/test/bug482461-theora.ogv^headers^ rename : content/media/test/bug482461.ogv => dom/media/test/bug482461.ogv rename : content/media/test/bug482461.ogv^headers^ => dom/media/test/bug482461.ogv^headers^ rename : content/media/test/bug495129.ogv => dom/media/test/bug495129.ogv rename : content/media/test/bug495129.ogv^headers^ => dom/media/test/bug495129.ogv^headers^ rename : content/media/test/bug495794.ogg => dom/media/test/bug495794.ogg rename : content/media/test/bug495794.ogg^headers^ => dom/media/test/bug495794.ogg^headers^ rename : content/media/test/bug498380.ogv => dom/media/test/bug498380.ogv rename : content/media/test/bug498380.ogv^headers^ => dom/media/test/bug498380.ogv^headers^ rename : content/media/test/bug498855-1.ogv => dom/media/test/bug498855-1.ogv rename : content/media/test/bug498855-1.ogv^headers^ => dom/media/test/bug498855-1.ogv^headers^ rename : content/media/test/bug498855-2.ogv => dom/media/test/bug498855-2.ogv rename : content/media/test/bug498855-2.ogv^headers^ => dom/media/test/bug498855-2.ogv^headers^ rename : content/media/test/bug498855-3.ogv => dom/media/test/bug498855-3.ogv rename : content/media/test/bug498855-3.ogv^headers^ => dom/media/test/bug498855-3.ogv^headers^ rename : content/media/test/bug499519.ogv => dom/media/test/bug499519.ogv rename : content/media/test/bug499519.ogv^headers^ => dom/media/test/bug499519.ogv^headers^ rename : content/media/test/bug500311.ogv => dom/media/test/bug500311.ogv rename : content/media/test/bug500311.ogv^headers^ => dom/media/test/bug500311.ogv^headers^ rename : content/media/test/bug501279.ogg => dom/media/test/bug501279.ogg rename : content/media/test/bug501279.ogg^headers^ => dom/media/test/bug501279.ogg^headers^ rename : content/media/test/bug504613.ogv => dom/media/test/bug504613.ogv rename : content/media/test/bug504613.ogv^headers^ => dom/media/test/bug504613.ogv^headers^ rename : content/media/test/bug504644.ogv => dom/media/test/bug504644.ogv rename : content/media/test/bug504644.ogv^headers^ => dom/media/test/bug504644.ogv^headers^ rename : content/media/test/bug504843.ogv => dom/media/test/bug504843.ogv rename : content/media/test/bug504843.ogv^headers^ => dom/media/test/bug504843.ogv^headers^ rename : content/media/test/bug506094.ogv => dom/media/test/bug506094.ogv rename : content/media/test/bug506094.ogv^headers^ => dom/media/test/bug506094.ogv^headers^ rename : content/media/test/bug516323.indexed.ogv => dom/media/test/bug516323.indexed.ogv rename : content/media/test/bug516323.indexed.ogv^headers^ => dom/media/test/bug516323.indexed.ogv^headers^ rename : content/media/test/bug516323.ogv => dom/media/test/bug516323.ogv rename : content/media/test/bug516323.ogv^headers^ => dom/media/test/bug516323.ogv^headers^ rename : content/media/test/bug520493.ogg => dom/media/test/bug520493.ogg rename : content/media/test/bug520493.ogg^headers^ => dom/media/test/bug520493.ogg^headers^ rename : content/media/test/bug520500.ogg => dom/media/test/bug520500.ogg rename : content/media/test/bug520500.ogg^headers^ => dom/media/test/bug520500.ogg^headers^ rename : content/media/test/bug520908.ogv => dom/media/test/bug520908.ogv rename : content/media/test/bug520908.ogv^headers^ => dom/media/test/bug520908.ogv^headers^ rename : content/media/test/bug523816.ogv => dom/media/test/bug523816.ogv rename : content/media/test/bug523816.ogv^headers^ => dom/media/test/bug523816.ogv^headers^ rename : content/media/test/bug533822.ogg => dom/media/test/bug533822.ogg rename : content/media/test/bug533822.ogg^headers^ => dom/media/test/bug533822.ogg^headers^ rename : content/media/test/bug556821.ogv => dom/media/test/bug556821.ogv rename : content/media/test/bug556821.ogv^headers^ => dom/media/test/bug556821.ogv^headers^ rename : content/media/test/bug557094.ogv => dom/media/test/bug557094.ogv rename : content/media/test/bug557094.ogv^headers^ => dom/media/test/bug557094.ogv^headers^ rename : content/media/test/bug580982.webm => dom/media/test/bug580982.webm rename : content/media/test/bug580982.webm^headers^ => dom/media/test/bug580982.webm^headers^ rename : content/media/test/bug603918.webm => dom/media/test/bug603918.webm rename : content/media/test/bug603918.webm^headers^ => dom/media/test/bug603918.webm^headers^ rename : content/media/test/bug604067.webm => dom/media/test/bug604067.webm rename : content/media/test/bug604067.webm^headers^ => dom/media/test/bug604067.webm^headers^ rename : content/media/test/bug883173.vtt => dom/media/test/bug883173.vtt rename : content/media/test/can_play_type_dash.js => dom/media/test/can_play_type_dash.js rename : content/media/test/can_play_type_ogg.js => dom/media/test/can_play_type_ogg.js rename : content/media/test/can_play_type_wave.js => dom/media/test/can_play_type_wave.js rename : content/media/test/can_play_type_webm.js => dom/media/test/can_play_type_webm.js rename : content/media/test/cancellable_request.sjs => dom/media/test/cancellable_request.sjs rename : content/media/test/chain.ogg => dom/media/test/chain.ogg rename : content/media/test/chain.ogg^headers^ => dom/media/test/chain.ogg^headers^ rename : content/media/test/chain.ogv => dom/media/test/chain.ogv rename : content/media/test/chain.ogv^headers^ => dom/media/test/chain.ogv^headers^ rename : content/media/test/chain.opus => dom/media/test/chain.opus rename : content/media/test/chain.opus^headers^ => dom/media/test/chain.opus^headers^ rename : content/media/test/chained-audio-video.ogg => dom/media/test/chained-audio-video.ogg rename : content/media/test/chained-audio-video.ogg^headers^ => dom/media/test/chained-audio-video.ogg^headers^ rename : content/media/test/chained-video.ogv => dom/media/test/chained-video.ogv rename : content/media/test/chained-video.ogv^headers^ => dom/media/test/chained-video.ogv^headers^ rename : content/media/test/chrome.ini => dom/media/test/chrome.ini rename : content/media/test/contentDuration1.sjs => dom/media/test/contentDuration1.sjs rename : content/media/test/contentDuration2.sjs => dom/media/test/contentDuration2.sjs rename : content/media/test/contentDuration3.sjs => dom/media/test/contentDuration3.sjs rename : content/media/test/contentDuration4.sjs => dom/media/test/contentDuration4.sjs rename : content/media/test/contentDuration5.sjs => dom/media/test/contentDuration5.sjs rename : content/media/test/contentDuration6.sjs => dom/media/test/contentDuration6.sjs rename : content/media/test/contentDuration7.sjs => dom/media/test/contentDuration7.sjs rename : content/media/test/contentType.sjs => dom/media/test/contentType.sjs rename : content/media/test/crashtests/0-timescale.html => dom/media/test/crashtests/0-timescale.html rename : content/media/test/crashtests/0-timescale.mp4 => dom/media/test/crashtests/0-timescale.mp4 rename : content/media/test/crashtests/1015662.html => dom/media/test/crashtests/1015662.html rename : content/media/test/crashtests/1028458.html => dom/media/test/crashtests/1028458.html rename : content/media/test/crashtests/1080986.html => dom/media/test/crashtests/1080986.html rename : content/media/test/crashtests/1080986.wav => dom/media/test/crashtests/1080986.wav rename : content/media/test/crashtests/459439-1.html => dom/media/test/crashtests/459439-1.html rename : content/media/test/crashtests/466607-1.html => dom/media/test/crashtests/466607-1.html rename : content/media/test/crashtests/466945-1.html => dom/media/test/crashtests/466945-1.html rename : content/media/test/crashtests/468763-1.html => dom/media/test/crashtests/468763-1.html rename : content/media/test/crashtests/474744-1.html => dom/media/test/crashtests/474744-1.html rename : content/media/test/crashtests/481136-1.html => dom/media/test/crashtests/481136-1.html rename : content/media/test/crashtests/492286-1.xhtml => dom/media/test/crashtests/492286-1.xhtml rename : content/media/test/crashtests/493915-1.html => dom/media/test/crashtests/493915-1.html rename : content/media/test/crashtests/495794-1.html => dom/media/test/crashtests/495794-1.html rename : content/media/test/crashtests/495794-1.ogg => dom/media/test/crashtests/495794-1.ogg rename : content/media/test/crashtests/576612-1.html => dom/media/test/crashtests/576612-1.html rename : content/media/test/crashtests/691096-1.html => dom/media/test/crashtests/691096-1.html rename : content/media/test/crashtests/752784-1.html => dom/media/test/crashtests/752784-1.html rename : content/media/test/crashtests/789075-1.html => dom/media/test/crashtests/789075-1.html rename : content/media/test/crashtests/789075.webm => dom/media/test/crashtests/789075.webm rename : content/media/test/crashtests/795892-1.html => dom/media/test/crashtests/795892-1.html rename : content/media/test/crashtests/844563.html => dom/media/test/crashtests/844563.html rename : content/media/test/crashtests/846612.html => dom/media/test/crashtests/846612.html rename : content/media/test/crashtests/852838.html => dom/media/test/crashtests/852838.html rename : content/media/test/crashtests/865537-1.html => dom/media/test/crashtests/865537-1.html rename : content/media/test/crashtests/868504.html => dom/media/test/crashtests/868504.html rename : content/media/test/crashtests/874869.html => dom/media/test/crashtests/874869.html rename : content/media/test/crashtests/874915.html => dom/media/test/crashtests/874915.html rename : content/media/test/crashtests/874934.html => dom/media/test/crashtests/874934.html rename : content/media/test/crashtests/874952.html => dom/media/test/crashtests/874952.html rename : content/media/test/crashtests/875144.html => dom/media/test/crashtests/875144.html rename : content/media/test/crashtests/875596.html => dom/media/test/crashtests/875596.html rename : content/media/test/crashtests/875911.html => dom/media/test/crashtests/875911.html rename : content/media/test/crashtests/876024-1.html => dom/media/test/crashtests/876024-1.html rename : content/media/test/crashtests/876024-2.html => dom/media/test/crashtests/876024-2.html rename : content/media/test/crashtests/876118.html => dom/media/test/crashtests/876118.html rename : content/media/test/crashtests/876207.html => dom/media/test/crashtests/876207.html rename : content/media/test/crashtests/876215.html => dom/media/test/crashtests/876215.html rename : content/media/test/crashtests/876249.html => dom/media/test/crashtests/876249.html rename : content/media/test/crashtests/876252.html => dom/media/test/crashtests/876252.html rename : content/media/test/crashtests/876834.html => dom/media/test/crashtests/876834.html rename : content/media/test/crashtests/877527.html => dom/media/test/crashtests/877527.html rename : content/media/test/crashtests/877820.html => dom/media/test/crashtests/877820.html rename : content/media/test/crashtests/878014.html => dom/media/test/crashtests/878014.html rename : content/media/test/crashtests/878328.html => dom/media/test/crashtests/878328.html rename : content/media/test/crashtests/878407.html => dom/media/test/crashtests/878407.html rename : content/media/test/crashtests/878478.html => dom/media/test/crashtests/878478.html rename : content/media/test/crashtests/880129.html => dom/media/test/crashtests/880129.html rename : content/media/test/crashtests/880202.html => dom/media/test/crashtests/880202.html rename : content/media/test/crashtests/880342-1.html => dom/media/test/crashtests/880342-1.html rename : content/media/test/crashtests/880342-2.html => dom/media/test/crashtests/880342-2.html rename : content/media/test/crashtests/880384.html => dom/media/test/crashtests/880384.html rename : content/media/test/crashtests/880404.html => dom/media/test/crashtests/880404.html rename : content/media/test/crashtests/880724.html => dom/media/test/crashtests/880724.html rename : content/media/test/crashtests/881775.html => dom/media/test/crashtests/881775.html rename : content/media/test/crashtests/882549.html => dom/media/test/crashtests/882549.html rename : content/media/test/crashtests/882956.html => dom/media/test/crashtests/882956.html rename : content/media/test/crashtests/884459.html => dom/media/test/crashtests/884459.html rename : content/media/test/crashtests/889042.html => dom/media/test/crashtests/889042.html rename : content/media/test/crashtests/894104.html => dom/media/test/crashtests/894104.html rename : content/media/test/crashtests/907986-1.html => dom/media/test/crashtests/907986-1.html rename : content/media/test/crashtests/907986-2.html => dom/media/test/crashtests/907986-2.html rename : content/media/test/crashtests/907986-3.html => dom/media/test/crashtests/907986-3.html rename : content/media/test/crashtests/907986-4.html => dom/media/test/crashtests/907986-4.html rename : content/media/test/crashtests/910171-1.html => dom/media/test/crashtests/910171-1.html rename : content/media/test/crashtests/920987.html => dom/media/test/crashtests/920987.html rename : content/media/test/crashtests/925619-1.html => dom/media/test/crashtests/925619-1.html rename : content/media/test/crashtests/925619-2.html => dom/media/test/crashtests/925619-2.html rename : content/media/test/crashtests/926619.html => dom/media/test/crashtests/926619.html rename : content/media/test/crashtests/933151.html => dom/media/test/crashtests/933151.html rename : content/media/test/crashtests/933156.html => dom/media/test/crashtests/933156.html rename : content/media/test/crashtests/944851.html => dom/media/test/crashtests/944851.html rename : content/media/test/crashtests/952756.html => dom/media/test/crashtests/952756.html rename : content/media/test/crashtests/966636.html => dom/media/test/crashtests/966636.html rename : content/media/test/crashtests/986901.html => dom/media/test/crashtests/986901.html rename : content/media/test/crashtests/990794.html => dom/media/test/crashtests/990794.html rename : content/media/test/crashtests/buffer-source-ended-1.html => dom/media/test/crashtests/buffer-source-ended-1.html rename : content/media/test/crashtests/cors.webm => dom/media/test/crashtests/cors.webm rename : content/media/test/crashtests/cors.webm^headers^ => dom/media/test/crashtests/cors.webm^headers^ rename : content/media/test/crashtests/crashtests.list => dom/media/test/crashtests/crashtests.list rename : content/media/test/crashtests/media-element-source-seek-1.html => dom/media/test/crashtests/media-element-source-seek-1.html rename : content/media/test/crashtests/offline-buffer-source-ended-1.html => dom/media/test/crashtests/offline-buffer-source-ended-1.html rename : content/media/test/crashtests/oscillator-ended-1.html => dom/media/test/crashtests/oscillator-ended-1.html rename : content/media/test/crashtests/oscillator-ended-2.html => dom/media/test/crashtests/oscillator-ended-2.html rename : content/media/test/crashtests/sound.ogg => dom/media/test/crashtests/sound.ogg rename : content/media/test/dash/dash-manifest-garbled-webm.mpd => dom/media/test/dash/dash-manifest-garbled-webm.mpd rename : content/media/test/dash/dash-manifest-garbled.mpd => dom/media/test/dash/dash-manifest-garbled.mpd rename : content/media/test/dash/dash-manifest-sjs.mpd => dom/media/test/dash/dash-manifest-sjs.mpd rename : content/media/test/dash/dash-manifest.mpd => dom/media/test/dash/dash-manifest.mpd rename : content/media/test/dash/dash-webm-audio-128k.webm => dom/media/test/dash/dash-webm-audio-128k.webm rename : content/media/test/dash/dash-webm-video-320x180.webm => dom/media/test/dash/dash-webm-video-320x180.webm rename : content/media/test/dash/dash-webm-video-428x240.webm => dom/media/test/dash/dash-webm-video-428x240.webm rename : content/media/test/dash/garbled.webm => dom/media/test/dash/garbled.webm rename : content/media/test/dash_detect_stream_switch.sjs => dom/media/test/dash_detect_stream_switch.sjs rename : content/media/test/detodos.opus => dom/media/test/detodos.opus rename : content/media/test/detodos.opus^headers^ => dom/media/test/detodos.opus^headers^ rename : content/media/test/detodos.webm => dom/media/test/detodos.webm rename : content/media/test/detodos.webm^headers^ => dom/media/test/detodos.webm^headers^ rename : content/media/test/dirac.ogg => dom/media/test/dirac.ogg rename : content/media/test/dirac.ogg^headers^ => dom/media/test/dirac.ogg^headers^ rename : content/media/test/dynamic_redirect.sjs => dom/media/test/dynamic_redirect.sjs rename : content/media/test/dynamic_resource.sjs => dom/media/test/dynamic_resource.sjs rename : content/media/test/file_access_controls.html => dom/media/test/file_access_controls.html rename : content/media/test/fragment_noplay.js => dom/media/test/fragment_noplay.js rename : content/media/test/fragment_play.js => dom/media/test/fragment_play.js rename : content/media/test/gizmo-frag-cenc.xml => dom/media/test/gizmo-frag-cenc.xml rename : content/media/test/gizmo-frag-cenc1.m4s => dom/media/test/gizmo-frag-cenc1.m4s rename : content/media/test/gizmo-frag-cenc2.m4s => dom/media/test/gizmo-frag-cenc2.m4s rename : content/media/test/gizmo-frag-cencinit.mp4 => dom/media/test/gizmo-frag-cencinit.mp4 rename : content/media/test/gizmo.mp4 => dom/media/test/gizmo.mp4 rename : content/media/test/gizmo.mp4^headers^ => dom/media/test/gizmo.mp4^headers^ rename : content/media/test/graph_latency.py => dom/media/test/graph_latency.py rename : content/media/test/huge-id3.mp3 => dom/media/test/huge-id3.mp3 rename : content/media/test/huge-id3.mp3^headers^ => dom/media/test/huge-id3.mp3^headers^ rename : content/media/test/id3tags.mp3 => dom/media/test/id3tags.mp3 rename : content/media/test/id3tags.mp3^headers^ => dom/media/test/id3tags.mp3^headers^ rename : content/media/test/invalid-cmap-s0c0.opus => dom/media/test/invalid-cmap-s0c0.opus rename : content/media/test/invalid-cmap-s0c0.opus^headers^ => dom/media/test/invalid-cmap-s0c0.opus^headers^ rename : content/media/test/invalid-cmap-s0c2.opus => dom/media/test/invalid-cmap-s0c2.opus rename : content/media/test/invalid-cmap-s0c2.opus^headers^ => dom/media/test/invalid-cmap-s0c2.opus^headers^ rename : content/media/test/invalid-cmap-s1c2.opus => dom/media/test/invalid-cmap-s1c2.opus rename : content/media/test/invalid-cmap-s1c2.opus^headers^ => dom/media/test/invalid-cmap-s1c2.opus^headers^ rename : content/media/test/invalid-cmap-short.opus => dom/media/test/invalid-cmap-short.opus rename : content/media/test/invalid-cmap-short.opus^headers^ => dom/media/test/invalid-cmap-short.opus^headers^ rename : content/media/test/invalid-discard_on_multi_blocks.webm => dom/media/test/invalid-discard_on_multi_blocks.webm rename : content/media/test/invalid-discard_on_multi_blocks.webm^headers^ => dom/media/test/invalid-discard_on_multi_blocks.webm^headers^ rename : content/media/test/invalid-excess_discard.webm => dom/media/test/invalid-excess_discard.webm rename : content/media/test/invalid-excess_discard.webm^headers^ => dom/media/test/invalid-excess_discard.webm^headers^ rename : content/media/test/invalid-excess_neg_discard.webm => dom/media/test/invalid-excess_neg_discard.webm rename : content/media/test/invalid-excess_neg_discard.webm^headers^ => dom/media/test/invalid-excess_neg_discard.webm^headers^ rename : content/media/test/invalid-m0c0.opus => dom/media/test/invalid-m0c0.opus rename : content/media/test/invalid-m0c0.opus^headers^ => dom/media/test/invalid-m0c0.opus^headers^ rename : content/media/test/invalid-m0c3.opus => dom/media/test/invalid-m0c3.opus rename : content/media/test/invalid-m0c3.opus^headers^ => dom/media/test/invalid-m0c3.opus^headers^ rename : content/media/test/invalid-m1c0.opus => dom/media/test/invalid-m1c0.opus rename : content/media/test/invalid-m1c0.opus^headers^ => dom/media/test/invalid-m1c0.opus^headers^ rename : content/media/test/invalid-m1c9.opus => dom/media/test/invalid-m1c9.opus rename : content/media/test/invalid-m1c9.opus^headers^ => dom/media/test/invalid-m1c9.opus^headers^ rename : content/media/test/invalid-m2c0.opus => dom/media/test/invalid-m2c0.opus rename : content/media/test/invalid-m2c0.opus^headers^ => dom/media/test/invalid-m2c0.opus^headers^ rename : content/media/test/invalid-m2c1.opus => dom/media/test/invalid-m2c1.opus rename : content/media/test/invalid-m2c1.opus^headers^ => dom/media/test/invalid-m2c1.opus^headers^ rename : content/media/test/invalid-neg_discard.webm => dom/media/test/invalid-neg_discard.webm rename : content/media/test/invalid-neg_discard.webm^headers^ => dom/media/test/invalid-neg_discard.webm^headers^ rename : content/media/test/invalid-preskip.webm => dom/media/test/invalid-preskip.webm rename : content/media/test/invalid-preskip.webm^headers^ => dom/media/test/invalid-preskip.webm^headers^ rename : content/media/test/long.vtt => dom/media/test/long.vtt rename : content/media/test/make-headers.sh => dom/media/test/make-headers.sh rename : content/media/test/manifest.js => dom/media/test/manifest.js rename : content/media/test/mochitest.ini => dom/media/test/mochitest.ini rename : content/media/test/multiple-bos-more-header-fileds.ogg => dom/media/test/multiple-bos-more-header-fileds.ogg rename : content/media/test/multiple-bos-more-header-fileds.ogg^headers^ => dom/media/test/multiple-bos-more-header-fileds.ogg^headers^ rename : content/media/test/multiple-bos.ogg => dom/media/test/multiple-bos.ogg rename : content/media/test/multiple-bos.ogg^headers^ => dom/media/test/multiple-bos.ogg^headers^ rename : content/media/test/no-cues.webm => dom/media/test/no-cues.webm rename : content/media/test/no-cues.webm^headers^ => dom/media/test/no-cues.webm^headers^ rename : content/media/test/noContentLength.sjs => dom/media/test/noContentLength.sjs rename : content/media/test/notags.mp3 => dom/media/test/notags.mp3 rename : content/media/test/notags.mp3^headers^ => dom/media/test/notags.mp3^headers^ rename : content/media/test/owl-funnier-id3.mp3 => dom/media/test/owl-funnier-id3.mp3 rename : content/media/test/owl-funnier-id3.mp3^headers^ => dom/media/test/owl-funnier-id3.mp3^headers^ rename : content/media/test/owl-funny-id3.mp3 => dom/media/test/owl-funny-id3.mp3 rename : content/media/test/owl-funny-id3.mp3^headers^ => dom/media/test/owl-funny-id3.mp3^headers^ rename : content/media/test/owl.mp3 => dom/media/test/owl.mp3 rename : content/media/test/owl.mp3^headers^ => dom/media/test/owl.mp3^headers^ rename : content/media/test/parser.vtt => dom/media/test/parser.vtt rename : content/media/test/pixel_aspect_ratio.mp4 => dom/media/test/pixel_aspect_ratio.mp4 rename : content/media/test/r11025_msadpcm_c1.wav => dom/media/test/r11025_msadpcm_c1.wav rename : content/media/test/r11025_msadpcm_c1.wav^headers^ => dom/media/test/r11025_msadpcm_c1.wav^headers^ rename : content/media/test/r11025_s16_c1.wav => dom/media/test/r11025_s16_c1.wav rename : content/media/test/r11025_s16_c1.wav^headers^ => dom/media/test/r11025_s16_c1.wav^headers^ rename : content/media/test/r11025_s16_c1_trailing.wav => dom/media/test/r11025_s16_c1_trailing.wav rename : content/media/test/r11025_s16_c1_trailing.wav^headers^ => dom/media/test/r11025_s16_c1_trailing.wav^headers^ rename : content/media/test/r11025_u8_c1.wav => dom/media/test/r11025_u8_c1.wav rename : content/media/test/r11025_u8_c1.wav^headers^ => dom/media/test/r11025_u8_c1.wav^headers^ rename : content/media/test/r11025_u8_c1_trunc.wav => dom/media/test/r11025_u8_c1_trunc.wav rename : content/media/test/r11025_u8_c1_trunc.wav^headers^ => dom/media/test/r11025_u8_c1_trunc.wav^headers^ rename : content/media/test/r16000_u8_c1_list.wav => dom/media/test/r16000_u8_c1_list.wav rename : content/media/test/r16000_u8_c1_list.wav^headers^ => dom/media/test/r16000_u8_c1_list.wav^headers^ rename : content/media/test/reactivate_helper.html => dom/media/test/reactivate_helper.html rename : content/media/test/redirect.sjs => dom/media/test/redirect.sjs rename : content/media/test/referer.sjs => dom/media/test/referer.sjs rename : content/media/test/region.vtt => dom/media/test/region.vtt rename : content/media/test/sample-fisbone-skeleton4.ogv => dom/media/test/sample-fisbone-skeleton4.ogv rename : content/media/test/sample-fisbone-skeleton4.ogv^headers^ => dom/media/test/sample-fisbone-skeleton4.ogv^headers^ rename : content/media/test/sample-fisbone-wrong-header.ogv => dom/media/test/sample-fisbone-wrong-header.ogv rename : content/media/test/sample-fisbone-wrong-header.ogv^headers^ => dom/media/test/sample-fisbone-wrong-header.ogv^headers^ rename : content/media/test/sample.3g2 => dom/media/test/sample.3g2 rename : content/media/test/sample.3gp => dom/media/test/sample.3gp rename : content/media/test/seek.ogv => dom/media/test/seek.ogv rename : content/media/test/seek.ogv^headers^ => dom/media/test/seek.ogv^headers^ rename : content/media/test/seek.webm => dom/media/test/seek.webm rename : content/media/test/seek.webm^headers^ => dom/media/test/seek.webm^headers^ rename : content/media/test/seek.yuv => dom/media/test/seek.yuv rename : content/media/test/seekLies.sjs => dom/media/test/seekLies.sjs rename : content/media/test/seek_support.js => dom/media/test/seek_support.js rename : content/media/test/seek_with_sound.ogg => dom/media/test/seek_with_sound.ogg rename : content/media/test/seek_with_sound.ogg^headers^ => dom/media/test/seek_with_sound.ogg^headers^ rename : content/media/test/short-cenc.mp4 => dom/media/test/short-cenc.mp4 rename : content/media/test/short-cenc.xml => dom/media/test/short-cenc.xml rename : content/media/test/short-video.ogv => dom/media/test/short-video.ogv rename : content/media/test/short-video.ogv^headers^ => dom/media/test/short-video.ogv^headers^ rename : content/media/test/short.mp4 => dom/media/test/short.mp4 rename : content/media/test/small-shot-mp3.mp4 => dom/media/test/small-shot-mp3.mp4 rename : content/media/test/small-shot-mp3.mp4^headers^ => dom/media/test/small-shot-mp3.mp4^headers^ rename : content/media/test/small-shot.m4a => dom/media/test/small-shot.m4a rename : content/media/test/small-shot.mp3 => dom/media/test/small-shot.mp3 rename : content/media/test/small-shot.mp3^headers^ => dom/media/test/small-shot.mp3^headers^ rename : content/media/test/small-shot.ogg => dom/media/test/small-shot.ogg rename : content/media/test/small-shot.ogg^headers^ => dom/media/test/small-shot.ogg^headers^ rename : content/media/test/sound.ogg => dom/media/test/sound.ogg rename : content/media/test/sound.ogg^headers^ => dom/media/test/sound.ogg^headers^ rename : content/media/test/spacestorm-1000Hz-100ms.ogg => dom/media/test/spacestorm-1000Hz-100ms.ogg rename : content/media/test/spacestorm-1000Hz-100ms.ogg^headers^ => dom/media/test/spacestorm-1000Hz-100ms.ogg^headers^ rename : content/media/test/split.webm => dom/media/test/split.webm rename : content/media/test/split.webm^headers^ => dom/media/test/split.webm^headers^ rename : content/media/test/street.mp4 => dom/media/test/street.mp4 rename : content/media/test/street.mp4^headers^ => dom/media/test/street.mp4^headers^ rename : content/media/test/test-1-mono.opus => dom/media/test/test-1-mono.opus rename : content/media/test/test-1-mono.opus^headers^ => dom/media/test/test-1-mono.opus^headers^ rename : content/media/test/test-2-stereo.opus => dom/media/test/test-2-stereo.opus rename : content/media/test/test-2-stereo.opus^headers^ => dom/media/test/test-2-stereo.opus^headers^ rename : content/media/test/test-3-LCR.opus => dom/media/test/test-3-LCR.opus rename : content/media/test/test-3-LCR.opus^headers^ => dom/media/test/test-3-LCR.opus^headers^ rename : content/media/test/test-4-quad.opus => dom/media/test/test-4-quad.opus rename : content/media/test/test-4-quad.opus^headers^ => dom/media/test/test-4-quad.opus^headers^ rename : content/media/test/test-5-5.0.opus => dom/media/test/test-5-5.0.opus rename : content/media/test/test-5-5.0.opus^headers^ => dom/media/test/test-5-5.0.opus^headers^ rename : content/media/test/test-6-5.1.opus => dom/media/test/test-6-5.1.opus rename : content/media/test/test-6-5.1.opus^headers^ => dom/media/test/test-6-5.1.opus^headers^ rename : content/media/test/test-7-6.1.opus => dom/media/test/test-7-6.1.opus rename : content/media/test/test-7-6.1.opus^headers^ => dom/media/test/test-7-6.1.opus^headers^ rename : content/media/test/test-8-7.1.opus => dom/media/test/test-8-7.1.opus rename : content/media/test/test-8-7.1.opus^headers^ => dom/media/test/test-8-7.1.opus^headers^ rename : content/media/test/test_VideoPlaybackQuality.html => dom/media/test/test_VideoPlaybackQuality.html rename : content/media/test/test_VideoPlaybackQuality_disabled.html => dom/media/test/test_VideoPlaybackQuality_disabled.html rename : content/media/test/test_access_control.html => dom/media/test/test_access_control.html rename : content/media/test/test_aspectratio_mp4.html => dom/media/test/test_aspectratio_mp4.html rename : content/media/test/test_audio1.html => dom/media/test/test_audio1.html rename : content/media/test/test_audio2.html => dom/media/test/test_audio2.html rename : content/media/test/test_audioDocumentTitle.html => dom/media/test/test_audioDocumentTitle.html rename : content/media/test/test_autoplay.html => dom/media/test/test_autoplay.html rename : content/media/test/test_autoplay_contentEditable.html => dom/media/test/test_autoplay_contentEditable.html rename : content/media/test/test_buffered.html => dom/media/test/test_buffered.html rename : content/media/test/test_bug1018933.html => dom/media/test/test_bug1018933.html rename : content/media/test/test_bug448534.html => dom/media/test/test_bug448534.html rename : content/media/test/test_bug463162.xhtml => dom/media/test/test_bug463162.xhtml rename : content/media/test/test_bug465498.html => dom/media/test/test_bug465498.html rename : content/media/test/test_bug493187.html => dom/media/test/test_bug493187.html rename : content/media/test/test_bug495145.html => dom/media/test/test_bug495145.html rename : content/media/test/test_bug495300.html => dom/media/test/test_bug495300.html rename : content/media/test/test_bug654550.html => dom/media/test/test_bug654550.html rename : content/media/test/test_bug686942.html => dom/media/test/test_bug686942.html rename : content/media/test/test_bug726904.html => dom/media/test/test_bug726904.html rename : content/media/test/test_bug874897.html => dom/media/test/test_bug874897.html rename : content/media/test/test_bug883173.html => dom/media/test/test_bug883173.html rename : content/media/test/test_bug895091.html => dom/media/test/test_bug895091.html rename : content/media/test/test_bug895305.html => dom/media/test/test_bug895305.html rename : content/media/test/test_bug919265.html => dom/media/test/test_bug919265.html rename : content/media/test/test_bug957847.html => dom/media/test/test_bug957847.html rename : content/media/test/test_can_play_type.html => dom/media/test/test_can_play_type.html rename : content/media/test/test_can_play_type_mpeg.html => dom/media/test/test_can_play_type_mpeg.html rename : content/media/test/test_can_play_type_no_ogg.html => dom/media/test/test_can_play_type_no_ogg.html rename : content/media/test/test_can_play_type_no_wave.html => dom/media/test/test_can_play_type_no_wave.html rename : content/media/test/test_can_play_type_no_webm.html => dom/media/test/test_can_play_type_no_webm.html rename : content/media/test/test_can_play_type_ogg.html => dom/media/test/test_can_play_type_ogg.html rename : content/media/test/test_can_play_type_wave.html => dom/media/test/test_can_play_type_wave.html rename : content/media/test/test_can_play_type_webm.html => dom/media/test/test_can_play_type_webm.html rename : content/media/test/test_chaining.html => dom/media/test/test_chaining.html rename : content/media/test/test_clone_media_element.html => dom/media/test/test_clone_media_element.html rename : content/media/test/test_closing_connections.html => dom/media/test/test_closing_connections.html rename : content/media/test/test_constants.html => dom/media/test/test_constants.html rename : content/media/test/test_contentDuration1.html => dom/media/test/test_contentDuration1.html rename : content/media/test/test_contentDuration2.html => dom/media/test/test_contentDuration2.html rename : content/media/test/test_contentDuration3.html => dom/media/test/test_contentDuration3.html rename : content/media/test/test_contentDuration4.html => dom/media/test/test_contentDuration4.html rename : content/media/test/test_contentDuration5.html => dom/media/test/test_contentDuration5.html rename : content/media/test/test_contentDuration6.html => dom/media/test/test_contentDuration6.html rename : content/media/test/test_contentDuration7.html => dom/media/test/test_contentDuration7.html rename : content/media/test/test_controls.html => dom/media/test/test_controls.html rename : content/media/test/test_currentTime.html => dom/media/test/test_currentTime.html rename : content/media/test/test_decode_error.html => dom/media/test/test_decode_error.html rename : content/media/test/test_decoder_disable.html => dom/media/test/test_decoder_disable.html rename : content/media/test/test_defaultMuted.html => dom/media/test/test_defaultMuted.html rename : content/media/test/test_delay_load.html => dom/media/test/test_delay_load.html rename : content/media/test/test_encryptedMediaExtensions.html => dom/media/test/test_encryptedMediaExtensions.html rename : content/media/test/test_error_in_video_document.html => dom/media/test/test_error_in_video_document.html rename : content/media/test/test_error_on_404.html => dom/media/test/test_error_on_404.html rename : content/media/test/test_fastSeek-forwards.html => dom/media/test/test_fastSeek-forwards.html rename : content/media/test/test_fastSeek.html => dom/media/test/test_fastSeek.html rename : content/media/test/test_fragment_noplay.html => dom/media/test/test_fragment_noplay.html rename : content/media/test/test_fragment_play.html => dom/media/test/test_fragment_play.html rename : content/media/test/test_imagecapture.html => dom/media/test/test_imagecapture.html rename : content/media/test/test_info_leak.html => dom/media/test/test_info_leak.html rename : content/media/test/test_invalid_reject.html => dom/media/test/test_invalid_reject.html rename : content/media/test/test_invalid_reject_play.html => dom/media/test/test_invalid_reject_play.html rename : content/media/test/test_invalid_seek.html => dom/media/test/test_invalid_seek.html rename : content/media/test/test_load.html => dom/media/test/test_load.html rename : content/media/test/test_load_candidates.html => dom/media/test/test_load_candidates.html rename : content/media/test/test_load_same_resource.html => dom/media/test/test_load_same_resource.html rename : content/media/test/test_load_source.html => dom/media/test/test_load_source.html rename : content/media/test/test_loop.html => dom/media/test/test_loop.html rename : content/media/test/test_media_selection.html => dom/media/test/test_media_selection.html rename : content/media/test/test_media_sniffer.html => dom/media/test/test_media_sniffer.html rename : content/media/test/test_mediarecorder_avoid_recursion.html => dom/media/test/test_mediarecorder_avoid_recursion.html rename : content/media/test/test_mediarecorder_creation.html => dom/media/test/test_mediarecorder_creation.html rename : content/media/test/test_mediarecorder_creation_fail.html => dom/media/test/test_mediarecorder_creation_fail.html rename : content/media/test/test_mediarecorder_getencodeddata.html => dom/media/test/test_mediarecorder_getencodeddata.html rename : content/media/test/test_mediarecorder_record_4ch_audiocontext.html => dom/media/test/test_mediarecorder_record_4ch_audiocontext.html rename : content/media/test/test_mediarecorder_record_audiocontext.html => dom/media/test/test_mediarecorder_record_audiocontext.html rename : content/media/test/test_mediarecorder_record_audiocontext_mlk.html => dom/media/test/test_mediarecorder_record_audiocontext_mlk.html rename : content/media/test/test_mediarecorder_record_audionode.html => dom/media/test/test_mediarecorder_record_audionode.html rename : content/media/test/test_mediarecorder_record_getdata_afterstart.html => dom/media/test/test_mediarecorder_record_getdata_afterstart.html rename : content/media/test/test_mediarecorder_record_gum_video_timeslice.html => dom/media/test/test_mediarecorder_record_gum_video_timeslice.html rename : content/media/test/test_mediarecorder_record_immediate_stop.html => dom/media/test/test_mediarecorder_record_immediate_stop.html rename : content/media/test/test_mediarecorder_record_no_timeslice.html => dom/media/test/test_mediarecorder_record_no_timeslice.html rename : content/media/test/test_mediarecorder_record_nosrc.html => dom/media/test/test_mediarecorder_record_nosrc.html rename : content/media/test/test_mediarecorder_record_session.html => dom/media/test/test_mediarecorder_record_session.html rename : content/media/test/test_mediarecorder_record_startstopstart.html => dom/media/test/test_mediarecorder_record_startstopstart.html rename : content/media/test/test_mediarecorder_record_stopms.html => dom/media/test/test_mediarecorder_record_stopms.html rename : content/media/test/test_mediarecorder_record_timeslice.html => dom/media/test/test_mediarecorder_record_timeslice.html rename : content/media/test/test_mediarecorder_reload_crash.html => dom/media/test/test_mediarecorder_reload_crash.html rename : content/media/test/test_mediarecorder_state_transition.html => dom/media/test/test_mediarecorder_state_transition.html rename : content/media/test/test_mediarecorder_unsupported_src.html => dom/media/test/test_mediarecorder_unsupported_src.html rename : content/media/test/test_mediatrack_consuming_mediaresource.html => dom/media/test/test_mediatrack_consuming_mediaresource.html rename : content/media/test/test_mediatrack_consuming_mediastream.html => dom/media/test/test_mediatrack_consuming_mediastream.html rename : content/media/test/test_mediatrack_events.html => dom/media/test/test_mediatrack_events.html rename : content/media/test/test_mediatrack_parsing_ogg.html => dom/media/test/test_mediatrack_parsing_ogg.html rename : content/media/test/test_mediatrack_replay_from_end.html => dom/media/test/test_mediatrack_replay_from_end.html rename : content/media/test/test_metadata.html => dom/media/test/test_metadata.html rename : content/media/test/test_mixed_principals.html => dom/media/test/test_mixed_principals.html rename : content/media/test/test_mozHasAudio.html => dom/media/test/test_mozHasAudio.html rename : content/media/test/test_networkState.html => dom/media/test/test_networkState.html rename : content/media/test/test_new_audio.html => dom/media/test/test_new_audio.html rename : content/media/test/test_no_load_event.html => dom/media/test/test_no_load_event.html rename : content/media/test/test_paused.html => dom/media/test/test_paused.html rename : content/media/test/test_paused_after_ended.html => dom/media/test/test_paused_after_ended.html rename : content/media/test/test_play_events.html => dom/media/test/test_play_events.html rename : content/media/test/test_play_events_2.html => dom/media/test/test_play_events_2.html rename : content/media/test/test_play_twice.html => dom/media/test/test_play_twice.html rename : content/media/test/test_playback.html => dom/media/test/test_playback.html rename : content/media/test/test_playback_errors.html => dom/media/test/test_playback_errors.html rename : content/media/test/test_playback_rate.html => dom/media/test/test_playback_rate.html rename : content/media/test/test_playback_rate_playpause.html => dom/media/test/test_playback_rate_playpause.html rename : content/media/test/test_played.html => dom/media/test/test_played.html rename : content/media/test/test_preload_actions.html => dom/media/test/test_preload_actions.html rename : content/media/test/test_preload_attribute.html => dom/media/test/test_preload_attribute.html rename : content/media/test/test_preload_suspend.html => dom/media/test/test_preload_suspend.html rename : content/media/test/test_progress.html => dom/media/test/test_progress.html rename : content/media/test/test_reactivate.html => dom/media/test/test_reactivate.html rename : content/media/test/test_readyState.html => dom/media/test/test_readyState.html rename : content/media/test/test_referer.html => dom/media/test/test_referer.html rename : content/media/test/test_replay_metadata.html => dom/media/test/test_replay_metadata.html rename : content/media/test/test_reset_events_async.html => dom/media/test/test_reset_events_async.html rename : content/media/test/test_reset_src.html => dom/media/test/test_reset_src.html rename : content/media/test/test_resume.html => dom/media/test/test_resume.html rename : content/media/test/test_seek-1.html => dom/media/test/test_seek-1.html rename : content/media/test/test_seek-10.html => dom/media/test/test_seek-10.html rename : content/media/test/test_seek-11.html => dom/media/test/test_seek-11.html rename : content/media/test/test_seek-12.html => dom/media/test/test_seek-12.html rename : content/media/test/test_seek-13.html => dom/media/test/test_seek-13.html rename : content/media/test/test_seek-2.html => dom/media/test/test_seek-2.html rename : content/media/test/test_seek-3.html => dom/media/test/test_seek-3.html rename : content/media/test/test_seek-4.html => dom/media/test/test_seek-4.html rename : content/media/test/test_seek-5.html => dom/media/test/test_seek-5.html rename : content/media/test/test_seek-6.html => dom/media/test/test_seek-6.html rename : content/media/test/test_seek-7.html => dom/media/test/test_seek-7.html rename : content/media/test/test_seek-8.html => dom/media/test/test_seek-8.html rename : content/media/test/test_seek-9.html => dom/media/test/test_seek-9.html rename : content/media/test/test_seekLies.html => dom/media/test/test_seekLies.html rename : content/media/test/test_seek_out_of_range.html => dom/media/test/test_seek_out_of_range.html rename : content/media/test/test_seekable1.html => dom/media/test/test_seekable1.html rename : content/media/test/test_seekable2.html => dom/media/test/test_seekable2.html rename : content/media/test/test_seekable3.html => dom/media/test/test_seekable3.html rename : content/media/test/test_source.html => dom/media/test/test_source.html rename : content/media/test/test_source_media.html => dom/media/test/test_source_media.html rename : content/media/test/test_source_null.html => dom/media/test/test_source_null.html rename : content/media/test/test_source_write.html => dom/media/test/test_source_write.html rename : content/media/test/test_standalone.html => dom/media/test/test_standalone.html rename : content/media/test/test_streams_autoplay.html => dom/media/test/test_streams_autoplay.html rename : content/media/test/test_streams_element_capture.html => dom/media/test/test_streams_element_capture.html rename : content/media/test/test_streams_element_capture_createObjectURL.html => dom/media/test/test_streams_element_capture_createObjectURL.html rename : content/media/test/test_streams_element_capture_playback.html => dom/media/test/test_streams_element_capture_playback.html rename : content/media/test/test_streams_element_capture_reset.html => dom/media/test/test_streams_element_capture_reset.html rename : content/media/test/test_streams_gc.html => dom/media/test/test_streams_gc.html rename : content/media/test/test_streams_srcObject.html => dom/media/test/test_streams_srcObject.html rename : content/media/test/test_streams_tracks.html => dom/media/test/test_streams_tracks.html rename : content/media/test/test_texttrack.html => dom/media/test/test_texttrack.html rename : content/media/test/test_texttrack_chrome.html => dom/media/test/test_texttrack_chrome.html rename : content/media/test/test_texttrackcue.html => dom/media/test/test_texttrackcue.html rename : content/media/test/test_texttrackcue_chrome.html => dom/media/test/test_texttrackcue_chrome.html rename : content/media/test/test_texttracklist.html => dom/media/test/test_texttracklist.html rename : content/media/test/test_texttracklist_chrome.html => dom/media/test/test_texttracklist_chrome.html rename : content/media/test/test_texttrackregion.html => dom/media/test/test_texttrackregion.html rename : content/media/test/test_timeupdate_small_files.html => dom/media/test/test_timeupdate_small_files.html rename : content/media/test/test_trackelementevent.html => dom/media/test/test_trackelementevent.html rename : content/media/test/test_trackevent.html => dom/media/test/test_trackevent.html rename : content/media/test/test_unseekable.html => dom/media/test/test_unseekable.html rename : content/media/test/test_videoDocumentTitle.html => dom/media/test/test_videoDocumentTitle.html rename : content/media/test/test_video_in_audio_element.html => dom/media/test/test_video_in_audio_element.html rename : content/media/test/test_video_to_canvas.html => dom/media/test/test_video_to_canvas.html rename : content/media/test/test_volume.html => dom/media/test/test_volume.html rename : content/media/test/test_vttparser.html => dom/media/test/test_vttparser.html rename : content/media/test/test_wav_ended1.html => dom/media/test/test_wav_ended1.html rename : content/media/test/test_wav_ended2.html => dom/media/test/test_wav_ended2.html rename : content/media/test/test_webvtt_disabled.html => dom/media/test/test_webvtt_disabled.html rename : content/media/test/variable-channel.ogg => dom/media/test/variable-channel.ogg rename : content/media/test/variable-channel.ogg^headers^ => dom/media/test/variable-channel.ogg^headers^ rename : content/media/test/variable-channel.opus => dom/media/test/variable-channel.opus rename : content/media/test/variable-channel.opus^headers^ => dom/media/test/variable-channel.opus^headers^ rename : content/media/test/variable-preskip.opus => dom/media/test/variable-preskip.opus rename : content/media/test/variable-preskip.opus^headers^ => dom/media/test/variable-preskip.opus^headers^ rename : content/media/test/variable-samplerate.ogg => dom/media/test/variable-samplerate.ogg rename : content/media/test/variable-samplerate.ogg^headers^ => dom/media/test/variable-samplerate.ogg^headers^ rename : content/media/test/variable-samplerate.opus => dom/media/test/variable-samplerate.opus rename : content/media/test/variable-samplerate.opus^headers^ => dom/media/test/variable-samplerate.opus^headers^ rename : content/media/test/vbr-head.mp3 => dom/media/test/vbr-head.mp3 rename : content/media/test/vbr-head.mp3^headers^ => dom/media/test/vbr-head.mp3^headers^ rename : content/media/test/vbr.mp3 => dom/media/test/vbr.mp3 rename : content/media/test/vbr.mp3^headers^ => dom/media/test/vbr.mp3^headers^ rename : content/media/test/video-overhang.ogg => dom/media/test/video-overhang.ogg rename : content/media/test/video-overhang.ogg^headers^ => dom/media/test/video-overhang.ogg^headers^ rename : content/media/test/vp9.webm => dom/media/test/vp9.webm rename : content/media/test/vp9.webm^headers^ => dom/media/test/vp9.webm^headers^ rename : content/media/test/vp9cake.webm => dom/media/test/vp9cake.webm rename : content/media/test/vp9cake.webm^headers^ => dom/media/test/vp9cake.webm^headers^ rename : content/media/test/wave_metadata.wav => dom/media/test/wave_metadata.wav rename : content/media/test/wave_metadata.wav^headers^ => dom/media/test/wave_metadata.wav^headers^ rename : content/media/test/wave_metadata_bad_len.wav => dom/media/test/wave_metadata_bad_len.wav rename : content/media/test/wave_metadata_bad_len.wav^headers^ => dom/media/test/wave_metadata_bad_len.wav^headers^ rename : content/media/test/wave_metadata_bad_no_null.wav => dom/media/test/wave_metadata_bad_no_null.wav rename : content/media/test/wave_metadata_bad_no_null.wav^headers^ => dom/media/test/wave_metadata_bad_no_null.wav^headers^ rename : content/media/test/wave_metadata_bad_utf8.wav => dom/media/test/wave_metadata_bad_utf8.wav rename : content/media/test/wave_metadata_bad_utf8.wav^headers^ => dom/media/test/wave_metadata_bad_utf8.wav^headers^ rename : content/media/test/wave_metadata_unknown_tag.wav => dom/media/test/wave_metadata_unknown_tag.wav rename : content/media/test/wave_metadata_unknown_tag.wav^headers^ => dom/media/test/wave_metadata_unknown_tag.wav^headers^ rename : content/media/test/wave_metadata_utf8.wav => dom/media/test/wave_metadata_utf8.wav rename : content/media/test/wave_metadata_utf8.wav^headers^ => dom/media/test/wave_metadata_utf8.wav^headers^ rename : content/media/test/wavedata_s16.wav => dom/media/test/wavedata_s16.wav rename : content/media/test/wavedata_s16.wav^headers^ => dom/media/test/wavedata_s16.wav^headers^ rename : content/media/test/wavedata_u8.wav => dom/media/test/wavedata_u8.wav rename : content/media/test/wavedata_u8.wav^headers^ => dom/media/test/wavedata_u8.wav^headers^ rename : content/media/wave/WaveDecoder.cpp => dom/media/wave/WaveDecoder.cpp rename : content/media/wave/WaveDecoder.h => dom/media/wave/WaveDecoder.h rename : content/media/wave/WaveReader.cpp => dom/media/wave/WaveReader.cpp rename : content/media/wave/WaveReader.h => dom/media/wave/WaveReader.h rename : content/media/wave/moz.build => dom/media/wave/moz.build rename : content/media/webaudio/AnalyserNode.cpp => dom/media/webaudio/AnalyserNode.cpp rename : content/media/webaudio/AnalyserNode.h => dom/media/webaudio/AnalyserNode.h rename : content/media/webaudio/AudioBuffer.cpp => dom/media/webaudio/AudioBuffer.cpp rename : content/media/webaudio/AudioBuffer.h => dom/media/webaudio/AudioBuffer.h rename : content/media/webaudio/AudioBufferSourceNode.cpp => dom/media/webaudio/AudioBufferSourceNode.cpp rename : content/media/webaudio/AudioBufferSourceNode.h => dom/media/webaudio/AudioBufferSourceNode.h rename : content/media/webaudio/AudioContext.cpp => dom/media/webaudio/AudioContext.cpp rename : content/media/webaudio/AudioContext.h => dom/media/webaudio/AudioContext.h rename : content/media/webaudio/AudioDestinationNode.cpp => dom/media/webaudio/AudioDestinationNode.cpp rename : content/media/webaudio/AudioDestinationNode.h => dom/media/webaudio/AudioDestinationNode.h rename : content/media/webaudio/AudioEventTimeline.h => dom/media/webaudio/AudioEventTimeline.h rename : content/media/webaudio/AudioListener.cpp => dom/media/webaudio/AudioListener.cpp rename : content/media/webaudio/AudioListener.h => dom/media/webaudio/AudioListener.h rename : content/media/webaudio/AudioNode.cpp => dom/media/webaudio/AudioNode.cpp rename : content/media/webaudio/AudioNode.h => dom/media/webaudio/AudioNode.h rename : content/media/webaudio/AudioNodeEngine.cpp => dom/media/webaudio/AudioNodeEngine.cpp rename : content/media/webaudio/AudioNodeEngine.h => dom/media/webaudio/AudioNodeEngine.h rename : content/media/webaudio/AudioNodeEngineNEON.cpp => dom/media/webaudio/AudioNodeEngineNEON.cpp rename : content/media/webaudio/AudioNodeEngineNEON.h => dom/media/webaudio/AudioNodeEngineNEON.h rename : content/media/webaudio/AudioNodeExternalInputStream.cpp => dom/media/webaudio/AudioNodeExternalInputStream.cpp rename : content/media/webaudio/AudioNodeExternalInputStream.h => dom/media/webaudio/AudioNodeExternalInputStream.h rename : content/media/webaudio/AudioNodeStream.cpp => dom/media/webaudio/AudioNodeStream.cpp rename : content/media/webaudio/AudioNodeStream.h => dom/media/webaudio/AudioNodeStream.h rename : content/media/webaudio/AudioParam.cpp => dom/media/webaudio/AudioParam.cpp rename : content/media/webaudio/AudioParam.h => dom/media/webaudio/AudioParam.h rename : content/media/webaudio/AudioParamTimeline.h => dom/media/webaudio/AudioParamTimeline.h rename : content/media/webaudio/AudioProcessingEvent.cpp => dom/media/webaudio/AudioProcessingEvent.cpp rename : content/media/webaudio/AudioProcessingEvent.h => dom/media/webaudio/AudioProcessingEvent.h rename : content/media/webaudio/BiquadFilterNode.cpp => dom/media/webaudio/BiquadFilterNode.cpp rename : content/media/webaudio/BiquadFilterNode.h => dom/media/webaudio/BiquadFilterNode.h rename : content/media/webaudio/BufferDecoder.cpp => dom/media/webaudio/BufferDecoder.cpp rename : content/media/webaudio/BufferDecoder.h => dom/media/webaudio/BufferDecoder.h rename : content/media/webaudio/ChannelMergerNode.cpp => dom/media/webaudio/ChannelMergerNode.cpp rename : content/media/webaudio/ChannelMergerNode.h => dom/media/webaudio/ChannelMergerNode.h rename : content/media/webaudio/ChannelSplitterNode.cpp => dom/media/webaudio/ChannelSplitterNode.cpp rename : content/media/webaudio/ChannelSplitterNode.h => dom/media/webaudio/ChannelSplitterNode.h rename : content/media/webaudio/ConvolverNode.cpp => dom/media/webaudio/ConvolverNode.cpp rename : content/media/webaudio/ConvolverNode.h => dom/media/webaudio/ConvolverNode.h rename : content/media/webaudio/DelayBuffer.cpp => dom/media/webaudio/DelayBuffer.cpp rename : content/media/webaudio/DelayBuffer.h => dom/media/webaudio/DelayBuffer.h rename : content/media/webaudio/DelayNode.cpp => dom/media/webaudio/DelayNode.cpp rename : content/media/webaudio/DelayNode.h => dom/media/webaudio/DelayNode.h rename : content/media/webaudio/DynamicsCompressorNode.cpp => dom/media/webaudio/DynamicsCompressorNode.cpp rename : content/media/webaudio/DynamicsCompressorNode.h => dom/media/webaudio/DynamicsCompressorNode.h rename : content/media/webaudio/FFTBlock.cpp => dom/media/webaudio/FFTBlock.cpp rename : content/media/webaudio/FFTBlock.h => dom/media/webaudio/FFTBlock.h rename : content/media/webaudio/GainNode.cpp => dom/media/webaudio/GainNode.cpp rename : content/media/webaudio/GainNode.h => dom/media/webaudio/GainNode.h rename : content/media/webaudio/MediaBufferDecoder.cpp => dom/media/webaudio/MediaBufferDecoder.cpp rename : content/media/webaudio/MediaBufferDecoder.h => dom/media/webaudio/MediaBufferDecoder.h rename : content/media/webaudio/MediaElementAudioSourceNode.cpp => dom/media/webaudio/MediaElementAudioSourceNode.cpp rename : content/media/webaudio/MediaElementAudioSourceNode.h => dom/media/webaudio/MediaElementAudioSourceNode.h rename : content/media/webaudio/MediaStreamAudioDestinationNode.cpp => dom/media/webaudio/MediaStreamAudioDestinationNode.cpp rename : content/media/webaudio/MediaStreamAudioDestinationNode.h => dom/media/webaudio/MediaStreamAudioDestinationNode.h rename : content/media/webaudio/MediaStreamAudioSourceNode.cpp => dom/media/webaudio/MediaStreamAudioSourceNode.cpp rename : content/media/webaudio/MediaStreamAudioSourceNode.h => dom/media/webaudio/MediaStreamAudioSourceNode.h rename : content/media/webaudio/OfflineAudioCompletionEvent.cpp => dom/media/webaudio/OfflineAudioCompletionEvent.cpp rename : content/media/webaudio/OfflineAudioCompletionEvent.h => dom/media/webaudio/OfflineAudioCompletionEvent.h rename : content/media/webaudio/OscillatorNode.cpp => dom/media/webaudio/OscillatorNode.cpp rename : content/media/webaudio/OscillatorNode.h => dom/media/webaudio/OscillatorNode.h rename : content/media/webaudio/PannerNode.cpp => dom/media/webaudio/PannerNode.cpp rename : content/media/webaudio/PannerNode.h => dom/media/webaudio/PannerNode.h rename : content/media/webaudio/PeriodicWave.cpp => dom/media/webaudio/PeriodicWave.cpp rename : content/media/webaudio/PeriodicWave.h => dom/media/webaudio/PeriodicWave.h rename : content/media/webaudio/PlayingRefChangeHandler.h => dom/media/webaudio/PlayingRefChangeHandler.h rename : content/media/webaudio/ReportDecodeResultTask.h => dom/media/webaudio/ReportDecodeResultTask.h rename : content/media/webaudio/ScriptProcessorNode.cpp => dom/media/webaudio/ScriptProcessorNode.cpp rename : content/media/webaudio/ScriptProcessorNode.h => dom/media/webaudio/ScriptProcessorNode.h rename : content/media/webaudio/ThreeDPoint.cpp => dom/media/webaudio/ThreeDPoint.cpp rename : content/media/webaudio/ThreeDPoint.h => dom/media/webaudio/ThreeDPoint.h rename : content/media/webaudio/WaveShaperNode.cpp => dom/media/webaudio/WaveShaperNode.cpp rename : content/media/webaudio/WaveShaperNode.h => dom/media/webaudio/WaveShaperNode.h rename : content/media/webaudio/WebAudioUtils.cpp => dom/media/webaudio/WebAudioUtils.cpp rename : content/media/webaudio/WebAudioUtils.h => dom/media/webaudio/WebAudioUtils.h rename : content/media/webaudio/blink/Biquad.cpp => dom/media/webaudio/blink/Biquad.cpp rename : content/media/webaudio/blink/Biquad.h => dom/media/webaudio/blink/Biquad.h rename : content/media/webaudio/blink/DenormalDisabler.h => dom/media/webaudio/blink/DenormalDisabler.h rename : content/media/webaudio/blink/DirectConvolver.cpp => dom/media/webaudio/blink/DirectConvolver.cpp rename : content/media/webaudio/blink/DirectConvolver.h => dom/media/webaudio/blink/DirectConvolver.h rename : content/media/webaudio/blink/DynamicsCompressor.cpp => dom/media/webaudio/blink/DynamicsCompressor.cpp rename : content/media/webaudio/blink/DynamicsCompressor.h => dom/media/webaudio/blink/DynamicsCompressor.h rename : content/media/webaudio/blink/DynamicsCompressorKernel.cpp => dom/media/webaudio/blink/DynamicsCompressorKernel.cpp rename : content/media/webaudio/blink/DynamicsCompressorKernel.h => dom/media/webaudio/blink/DynamicsCompressorKernel.h rename : content/media/webaudio/blink/FFTConvolver.cpp => dom/media/webaudio/blink/FFTConvolver.cpp rename : content/media/webaudio/blink/FFTConvolver.h => dom/media/webaudio/blink/FFTConvolver.h rename : content/media/webaudio/blink/HRTFDatabase.cpp => dom/media/webaudio/blink/HRTFDatabase.cpp rename : content/media/webaudio/blink/HRTFDatabase.h => dom/media/webaudio/blink/HRTFDatabase.h rename : content/media/webaudio/blink/HRTFDatabaseLoader.cpp => dom/media/webaudio/blink/HRTFDatabaseLoader.cpp rename : content/media/webaudio/blink/HRTFDatabaseLoader.h => dom/media/webaudio/blink/HRTFDatabaseLoader.h rename : content/media/webaudio/blink/HRTFElevation.cpp => dom/media/webaudio/blink/HRTFElevation.cpp rename : content/media/webaudio/blink/HRTFElevation.h => dom/media/webaudio/blink/HRTFElevation.h rename : content/media/webaudio/blink/HRTFKernel.cpp => dom/media/webaudio/blink/HRTFKernel.cpp rename : content/media/webaudio/blink/HRTFKernel.h => dom/media/webaudio/blink/HRTFKernel.h rename : content/media/webaudio/blink/HRTFPanner.cpp => dom/media/webaudio/blink/HRTFPanner.cpp rename : content/media/webaudio/blink/HRTFPanner.h => dom/media/webaudio/blink/HRTFPanner.h rename : content/media/webaudio/blink/IRC_Composite_C_R0195-incl.cpp => dom/media/webaudio/blink/IRC_Composite_C_R0195-incl.cpp rename : content/media/webaudio/blink/PeriodicWave.cpp => dom/media/webaudio/blink/PeriodicWave.cpp rename : content/media/webaudio/blink/PeriodicWave.h => dom/media/webaudio/blink/PeriodicWave.h rename : content/media/webaudio/blink/README => dom/media/webaudio/blink/README rename : content/media/webaudio/blink/Reverb.cpp => dom/media/webaudio/blink/Reverb.cpp rename : content/media/webaudio/blink/Reverb.h => dom/media/webaudio/blink/Reverb.h rename : content/media/webaudio/blink/ReverbAccumulationBuffer.cpp => dom/media/webaudio/blink/ReverbAccumulationBuffer.cpp rename : content/media/webaudio/blink/ReverbAccumulationBuffer.h => dom/media/webaudio/blink/ReverbAccumulationBuffer.h rename : content/media/webaudio/blink/ReverbConvolver.cpp => dom/media/webaudio/blink/ReverbConvolver.cpp rename : content/media/webaudio/blink/ReverbConvolver.h => dom/media/webaudio/blink/ReverbConvolver.h rename : content/media/webaudio/blink/ReverbConvolverStage.cpp => dom/media/webaudio/blink/ReverbConvolverStage.cpp rename : content/media/webaudio/blink/ReverbConvolverStage.h => dom/media/webaudio/blink/ReverbConvolverStage.h rename : content/media/webaudio/blink/ReverbInputBuffer.cpp => dom/media/webaudio/blink/ReverbInputBuffer.cpp rename : content/media/webaudio/blink/ReverbInputBuffer.h => dom/media/webaudio/blink/ReverbInputBuffer.h rename : content/media/webaudio/blink/ZeroPole.cpp => dom/media/webaudio/blink/ZeroPole.cpp rename : content/media/webaudio/blink/ZeroPole.h => dom/media/webaudio/blink/ZeroPole.h rename : content/media/webaudio/blink/moz.build => dom/media/webaudio/blink/moz.build rename : content/media/webaudio/compiledtest/TestAudioEventTimeline.cpp => dom/media/webaudio/compiledtest/TestAudioEventTimeline.cpp rename : content/media/webaudio/compiledtest/moz.build => dom/media/webaudio/compiledtest/moz.build rename : content/media/webaudio/moz.build => dom/media/webaudio/moz.build rename : content/media/webaudio/test/audio-expected.wav => dom/media/webaudio/test/audio-expected.wav rename : content/media/webaudio/test/audio-mono-expected-2.wav => dom/media/webaudio/test/audio-mono-expected-2.wav rename : content/media/webaudio/test/audio-mono-expected.wav => dom/media/webaudio/test/audio-mono-expected.wav rename : content/media/webaudio/test/audio-quad.wav => dom/media/webaudio/test/audio-quad.wav rename : content/media/webaudio/test/audio.ogv => dom/media/webaudio/test/audio.ogv rename : content/media/webaudio/test/audioBufferSourceNodeNeutered_worker.js => dom/media/webaudio/test/audioBufferSourceNodeNeutered_worker.js rename : content/media/webaudio/test/blink/README => dom/media/webaudio/test/blink/README rename : content/media/webaudio/test/blink/audio-testing.js => dom/media/webaudio/test/blink/audio-testing.js rename : content/media/webaudio/test/blink/convolution-testing.js => dom/media/webaudio/test/blink/convolution-testing.js rename : content/media/webaudio/test/blink/mochitest.ini => dom/media/webaudio/test/blink/mochitest.ini rename : content/media/webaudio/test/blink/panner-model-testing.js => dom/media/webaudio/test/blink/panner-model-testing.js rename : content/media/webaudio/test/browser.ini => dom/media/webaudio/test/browser.ini rename : content/media/webaudio/test/browser_mozAudioChannel.html => dom/media/webaudio/test/browser_mozAudioChannel.html rename : content/media/webaudio/test/browser_mozAudioChannel.js => dom/media/webaudio/test/browser_mozAudioChannel.js rename : content/media/webaudio/test/browser_mozAudioChannel_muted.html => dom/media/webaudio/test/browser_mozAudioChannel_muted.html rename : content/media/webaudio/test/browser_mozAudioChannel_muted.js => dom/media/webaudio/test/browser_mozAudioChannel_muted.js rename : content/media/webaudio/test/chrome.ini => dom/media/webaudio/test/chrome.ini rename : content/media/webaudio/test/invalid.txt => dom/media/webaudio/test/invalid.txt rename : content/media/webaudio/test/layouttest-glue.js => dom/media/webaudio/test/layouttest-glue.js rename : content/media/webaudio/test/mochitest.ini => dom/media/webaudio/test/mochitest.ini rename : content/media/webaudio/test/noaudio.webm => dom/media/webaudio/test/noaudio.webm rename : content/media/webaudio/test/small-shot-expected.wav => dom/media/webaudio/test/small-shot-expected.wav rename : content/media/webaudio/test/small-shot-mono-expected.wav => dom/media/webaudio/test/small-shot-mono-expected.wav rename : content/media/webaudio/test/small-shot.mp3 => dom/media/webaudio/test/small-shot.mp3 rename : content/media/webaudio/test/small-shot.ogg => dom/media/webaudio/test/small-shot.ogg rename : content/media/webaudio/test/test_AudioBuffer.html => dom/media/webaudio/test/test_AudioBuffer.html rename : content/media/webaudio/test/test_AudioContext.html => dom/media/webaudio/test/test_AudioContext.html rename : content/media/webaudio/test/test_AudioListener.html => dom/media/webaudio/test/test_AudioListener.html rename : content/media/webaudio/test/test_AudioNodeDevtoolsAPI.html => dom/media/webaudio/test/test_AudioNodeDevtoolsAPI.html rename : content/media/webaudio/test/test_OfflineAudioContext.html => dom/media/webaudio/test/test_OfflineAudioContext.html rename : content/media/webaudio/test/test_analyserNode.html => dom/media/webaudio/test/test_analyserNode.html rename : content/media/webaudio/test/test_analyserNodeOutput.html => dom/media/webaudio/test/test_analyserNodeOutput.html rename : content/media/webaudio/test/test_analyserNodePassThrough.html => dom/media/webaudio/test/test_analyserNodePassThrough.html rename : content/media/webaudio/test/test_audioBufferSourceNode.html => dom/media/webaudio/test/test_audioBufferSourceNode.html rename : content/media/webaudio/test/test_audioBufferSourceNodeEnded.html => dom/media/webaudio/test/test_audioBufferSourceNodeEnded.html rename : content/media/webaudio/test/test_audioBufferSourceNodeLazyLoopParam.html => dom/media/webaudio/test/test_audioBufferSourceNodeLazyLoopParam.html rename : content/media/webaudio/test/test_audioBufferSourceNodeLoop.html => dom/media/webaudio/test/test_audioBufferSourceNodeLoop.html rename : content/media/webaudio/test/test_audioBufferSourceNodeLoopStartEnd.html => dom/media/webaudio/test/test_audioBufferSourceNodeLoopStartEnd.html rename : content/media/webaudio/test/test_audioBufferSourceNodeLoopStartEndSame.html => dom/media/webaudio/test/test_audioBufferSourceNodeLoopStartEndSame.html rename : content/media/webaudio/test/test_audioBufferSourceNodeNeutered.html => dom/media/webaudio/test/test_audioBufferSourceNodeNeutered.html rename : content/media/webaudio/test/test_audioBufferSourceNodeNoStart.html => dom/media/webaudio/test/test_audioBufferSourceNodeNoStart.html rename : content/media/webaudio/test/test_audioBufferSourceNodeNullBuffer.html => dom/media/webaudio/test/test_audioBufferSourceNodeNullBuffer.html rename : content/media/webaudio/test/test_audioBufferSourceNodeOffset.html => dom/media/webaudio/test/test_audioBufferSourceNodeOffset.html rename : content/media/webaudio/test/test_audioBufferSourceNodePassThrough.html => dom/media/webaudio/test/test_audioBufferSourceNodePassThrough.html rename : content/media/webaudio/test/test_audioDestinationNode.html => dom/media/webaudio/test/test_audioDestinationNode.html rename : content/media/webaudio/test/test_audioParamExponentialRamp.html => dom/media/webaudio/test/test_audioParamExponentialRamp.html rename : content/media/webaudio/test/test_audioParamGain.html => dom/media/webaudio/test/test_audioParamGain.html rename : content/media/webaudio/test/test_audioParamLinearRamp.html => dom/media/webaudio/test/test_audioParamLinearRamp.html rename : content/media/webaudio/test/test_audioParamSetCurveAtTime.html => dom/media/webaudio/test/test_audioParamSetCurveAtTime.html rename : content/media/webaudio/test/test_audioParamSetCurveAtTimeZeroDuration.html => dom/media/webaudio/test/test_audioParamSetCurveAtTimeZeroDuration.html rename : content/media/webaudio/test/test_audioParamSetTargetAtTime.html => dom/media/webaudio/test/test_audioParamSetTargetAtTime.html rename : content/media/webaudio/test/test_audioParamSetValueAtTime.html => dom/media/webaudio/test/test_audioParamSetValueAtTime.html rename : content/media/webaudio/test/test_audioParamTimelineDestinationOffset.html => dom/media/webaudio/test/test_audioParamTimelineDestinationOffset.html rename : content/media/webaudio/test/test_badConnect.html => dom/media/webaudio/test/test_badConnect.html rename : content/media/webaudio/test/test_biquadFilterNode.html => dom/media/webaudio/test/test_biquadFilterNode.html rename : content/media/webaudio/test/test_biquadFilterNodePassThrough.html => dom/media/webaudio/test/test_biquadFilterNodePassThrough.html rename : content/media/webaudio/test/test_biquadFilterNodeWithGain.html => dom/media/webaudio/test/test_biquadFilterNodeWithGain.html rename : content/media/webaudio/test/test_bug1056032.html => dom/media/webaudio/test/test_bug1056032.html rename : content/media/webaudio/test/test_bug808374.html => dom/media/webaudio/test/test_bug808374.html rename : content/media/webaudio/test/test_bug827541.html => dom/media/webaudio/test/test_bug827541.html rename : content/media/webaudio/test/test_bug839753.html => dom/media/webaudio/test/test_bug839753.html rename : content/media/webaudio/test/test_bug845960.html => dom/media/webaudio/test/test_bug845960.html rename : content/media/webaudio/test/test_bug856771.html => dom/media/webaudio/test/test_bug856771.html rename : content/media/webaudio/test/test_bug866570.html => dom/media/webaudio/test/test_bug866570.html rename : content/media/webaudio/test/test_bug866737.html => dom/media/webaudio/test/test_bug866737.html rename : content/media/webaudio/test/test_bug867089.html => dom/media/webaudio/test/test_bug867089.html rename : content/media/webaudio/test/test_bug867104.html => dom/media/webaudio/test/test_bug867104.html rename : content/media/webaudio/test/test_bug867174.html => dom/media/webaudio/test/test_bug867174.html rename : content/media/webaudio/test/test_bug867203.html => dom/media/webaudio/test/test_bug867203.html rename : content/media/webaudio/test/test_bug875221.html => dom/media/webaudio/test/test_bug875221.html rename : content/media/webaudio/test/test_bug875402.html => dom/media/webaudio/test/test_bug875402.html rename : content/media/webaudio/test/test_bug894150.html => dom/media/webaudio/test/test_bug894150.html rename : content/media/webaudio/test/test_bug956489.html => dom/media/webaudio/test/test_bug956489.html rename : content/media/webaudio/test/test_bug964376.html => dom/media/webaudio/test/test_bug964376.html rename : content/media/webaudio/test/test_bug972678.html => dom/media/webaudio/test/test_bug972678.html rename : content/media/webaudio/test/test_channelMergerNode.html => dom/media/webaudio/test/test_channelMergerNode.html rename : content/media/webaudio/test/test_channelMergerNodeWithVolume.html => dom/media/webaudio/test/test_channelMergerNodeWithVolume.html rename : content/media/webaudio/test/test_channelSplitterNode.html => dom/media/webaudio/test/test_channelSplitterNode.html rename : content/media/webaudio/test/test_channelSplitterNodeWithVolume.html => dom/media/webaudio/test/test_channelSplitterNodeWithVolume.html rename : content/media/webaudio/test/test_convolverNode.html => dom/media/webaudio/test/test_convolverNode.html rename : content/media/webaudio/test/test_convolverNodeChannelCount.html => dom/media/webaudio/test/test_convolverNodeChannelCount.html rename : content/media/webaudio/test/test_convolverNodePassThrough.html => dom/media/webaudio/test/test_convolverNodePassThrough.html rename : content/media/webaudio/test/test_convolverNodeWithGain.html => dom/media/webaudio/test/test_convolverNodeWithGain.html rename : content/media/webaudio/test/test_convolverNode_mono_mono.html => dom/media/webaudio/test/test_convolverNode_mono_mono.html rename : content/media/webaudio/test/test_currentTime.html => dom/media/webaudio/test/test_currentTime.html rename : content/media/webaudio/test/test_decodeMultichannel.html => dom/media/webaudio/test/test_decodeMultichannel.html rename : content/media/webaudio/test/test_delayNode.html => dom/media/webaudio/test/test_delayNode.html rename : content/media/webaudio/test/test_delayNodeAtMax.html => dom/media/webaudio/test/test_delayNodeAtMax.html rename : content/media/webaudio/test/test_delayNodeChannelChanges.html => dom/media/webaudio/test/test_delayNodeChannelChanges.html rename : content/media/webaudio/test/test_delayNodeCycles.html => dom/media/webaudio/test/test_delayNodeCycles.html rename : content/media/webaudio/test/test_delayNodePassThrough.html => dom/media/webaudio/test/test_delayNodePassThrough.html rename : content/media/webaudio/test/test_delayNodeSmallMaxDelay.html => dom/media/webaudio/test/test_delayNodeSmallMaxDelay.html rename : content/media/webaudio/test/test_delayNodeTailIncrease.html => dom/media/webaudio/test/test_delayNodeTailIncrease.html rename : content/media/webaudio/test/test_delayNodeTailWithDisconnect.html => dom/media/webaudio/test/test_delayNodeTailWithDisconnect.html rename : content/media/webaudio/test/test_delayNodeTailWithGain.html => dom/media/webaudio/test/test_delayNodeTailWithGain.html rename : content/media/webaudio/test/test_delayNodeTailWithReconnect.html => dom/media/webaudio/test/test_delayNodeTailWithReconnect.html rename : content/media/webaudio/test/test_delayNodeWithGain.html => dom/media/webaudio/test/test_delayNodeWithGain.html rename : content/media/webaudio/test/test_dynamicsCompressorNode.html => dom/media/webaudio/test/test_dynamicsCompressorNode.html rename : content/media/webaudio/test/test_dynamicsCompressorNodePassThrough.html => dom/media/webaudio/test/test_dynamicsCompressorNodePassThrough.html rename : content/media/webaudio/test/test_gainNode.html => dom/media/webaudio/test/test_gainNode.html rename : content/media/webaudio/test/test_gainNodeInLoop.html => dom/media/webaudio/test/test_gainNodeInLoop.html rename : content/media/webaudio/test/test_gainNodePassThrough.html => dom/media/webaudio/test/test_gainNodePassThrough.html rename : content/media/webaudio/test/test_maxChannelCount.html => dom/media/webaudio/test/test_maxChannelCount.html rename : content/media/webaudio/test/test_mediaDecoding.html => dom/media/webaudio/test/test_mediaDecoding.html rename : content/media/webaudio/test/test_mediaElementAudioSourceNode.html => dom/media/webaudio/test/test_mediaElementAudioSourceNode.html rename : content/media/webaudio/test/test_mediaElementAudioSourceNodePassThrough.html => dom/media/webaudio/test/test_mediaElementAudioSourceNodePassThrough.html rename : content/media/webaudio/test/test_mediaStreamAudioDestinationNode.html => dom/media/webaudio/test/test_mediaStreamAudioDestinationNode.html rename : content/media/webaudio/test/test_mediaStreamAudioSourceNode.html => dom/media/webaudio/test/test_mediaStreamAudioSourceNode.html rename : content/media/webaudio/test/test_mediaStreamAudioSourceNodeCrossOrigin.html => dom/media/webaudio/test/test_mediaStreamAudioSourceNodeCrossOrigin.html rename : content/media/webaudio/test/test_mediaStreamAudioSourceNodePassThrough.html => dom/media/webaudio/test/test_mediaStreamAudioSourceNodePassThrough.html rename : content/media/webaudio/test/test_mediaStreamAudioSourceNodeResampling.html => dom/media/webaudio/test/test_mediaStreamAudioSourceNodeResampling.html rename : content/media/webaudio/test/test_mixingRules.html => dom/media/webaudio/test/test_mixingRules.html rename : content/media/webaudio/test/test_mozaudiochannel.html => dom/media/webaudio/test/test_mozaudiochannel.html rename : content/media/webaudio/test/test_nodeToParamConnection.html => dom/media/webaudio/test/test_nodeToParamConnection.html rename : content/media/webaudio/test/test_offlineDestinationChannelCountLess.html => dom/media/webaudio/test/test_offlineDestinationChannelCountLess.html rename : content/media/webaudio/test/test_offlineDestinationChannelCountMore.html => dom/media/webaudio/test/test_offlineDestinationChannelCountMore.html rename : content/media/webaudio/test/test_oscillatorNode.html => dom/media/webaudio/test/test_oscillatorNode.html rename : content/media/webaudio/test/test_oscillatorNode2.html => dom/media/webaudio/test/test_oscillatorNode2.html rename : content/media/webaudio/test/test_oscillatorNodePassThrough.html => dom/media/webaudio/test/test_oscillatorNodePassThrough.html rename : content/media/webaudio/test/test_oscillatorNodeStart.html => dom/media/webaudio/test/test_oscillatorNodeStart.html rename : content/media/webaudio/test/test_oscillatorTypeChange.html => dom/media/webaudio/test/test_oscillatorTypeChange.html rename : content/media/webaudio/test/test_pannerNode.html => dom/media/webaudio/test/test_pannerNode.html rename : content/media/webaudio/test/test_pannerNodeAbove.html => dom/media/webaudio/test/test_pannerNodeAbove.html rename : content/media/webaudio/test/test_pannerNodeChannelCount.html => dom/media/webaudio/test/test_pannerNodeChannelCount.html rename : content/media/webaudio/test/test_pannerNodeHRTFSymmetry.html => dom/media/webaudio/test/test_pannerNodeHRTFSymmetry.html rename : content/media/webaudio/test/test_pannerNodePassThrough.html => dom/media/webaudio/test/test_pannerNodePassThrough.html rename : content/media/webaudio/test/test_pannerNodeTail.html => dom/media/webaudio/test/test_pannerNodeTail.html rename : content/media/webaudio/test/test_pannerNode_equalPower.html => dom/media/webaudio/test/test_pannerNode_equalPower.html rename : content/media/webaudio/test/test_periodicWave.html => dom/media/webaudio/test/test_periodicWave.html rename : content/media/webaudio/test/test_scriptProcessorNode.html => dom/media/webaudio/test/test_scriptProcessorNode.html rename : content/media/webaudio/test/test_scriptProcessorNodeChannelCount.html => dom/media/webaudio/test/test_scriptProcessorNodeChannelCount.html rename : content/media/webaudio/test/test_scriptProcessorNodeNotConnected.html => dom/media/webaudio/test/test_scriptProcessorNodeNotConnected.html rename : content/media/webaudio/test/test_scriptProcessorNodePassThrough.html => dom/media/webaudio/test/test_scriptProcessorNodePassThrough.html rename : content/media/webaudio/test/test_scriptProcessorNodeZeroInputOutput.html => dom/media/webaudio/test/test_scriptProcessorNodeZeroInputOutput.html rename : content/media/webaudio/test/test_scriptProcessorNode_playbackTime1.html => dom/media/webaudio/test/test_scriptProcessorNode_playbackTime1.html rename : content/media/webaudio/test/test_singleSourceDest.html => dom/media/webaudio/test/test_singleSourceDest.html rename : content/media/webaudio/test/test_stereoPanningWithGain.html => dom/media/webaudio/test/test_stereoPanningWithGain.html rename : content/media/webaudio/test/test_waveDecoder.html => dom/media/webaudio/test/test_waveDecoder.html rename : content/media/webaudio/test/test_waveShaper.html => dom/media/webaudio/test/test_waveShaper.html rename : content/media/webaudio/test/test_waveShaperNoCurve.html => dom/media/webaudio/test/test_waveShaperNoCurve.html rename : content/media/webaudio/test/test_waveShaperPassThrough.html => dom/media/webaudio/test/test_waveShaperPassThrough.html rename : content/media/webaudio/test/test_waveShaperZeroLengthCurve.html => dom/media/webaudio/test/test_waveShaperZeroLengthCurve.html rename : content/media/webaudio/test/ting-44.1k-1ch.ogg => dom/media/webaudio/test/ting-44.1k-1ch.ogg rename : content/media/webaudio/test/ting-44.1k-1ch.wav => dom/media/webaudio/test/ting-44.1k-1ch.wav rename : content/media/webaudio/test/ting-44.1k-2ch.ogg => dom/media/webaudio/test/ting-44.1k-2ch.ogg rename : content/media/webaudio/test/ting-44.1k-2ch.wav => dom/media/webaudio/test/ting-44.1k-2ch.wav rename : content/media/webaudio/test/ting-48k-1ch.ogg => dom/media/webaudio/test/ting-48k-1ch.ogg rename : content/media/webaudio/test/ting-48k-1ch.wav => dom/media/webaudio/test/ting-48k-1ch.wav rename : content/media/webaudio/test/ting-48k-2ch.ogg => dom/media/webaudio/test/ting-48k-2ch.ogg rename : content/media/webaudio/test/ting-48k-2ch.wav => dom/media/webaudio/test/ting-48k-2ch.wav rename : content/media/webaudio/test/ting-dualchannel44.1.wav => dom/media/webaudio/test/ting-dualchannel44.1.wav rename : content/media/webaudio/test/ting-dualchannel48.wav => dom/media/webaudio/test/ting-dualchannel48.wav rename : content/media/webaudio/test/webaudio.js => dom/media/webaudio/test/webaudio.js rename : content/media/webm/EbmlComposer.cpp => dom/media/webm/EbmlComposer.cpp rename : content/media/webm/EbmlComposer.h => dom/media/webm/EbmlComposer.h rename : content/media/webm/WebMBufferedParser.cpp => dom/media/webm/WebMBufferedParser.cpp rename : content/media/webm/WebMBufferedParser.h => dom/media/webm/WebMBufferedParser.h rename : content/media/webm/WebMDecoder.cpp => dom/media/webm/WebMDecoder.cpp rename : content/media/webm/WebMDecoder.h => dom/media/webm/WebMDecoder.h rename : content/media/webm/WebMReader.cpp => dom/media/webm/WebMReader.cpp rename : content/media/webm/WebMReader.h => dom/media/webm/WebMReader.h rename : content/media/webm/WebMWriter.cpp => dom/media/webm/WebMWriter.cpp rename : content/media/webm/WebMWriter.h => dom/media/webm/WebMWriter.h rename : content/media/webm/moz.build => dom/media/webm/moz.build rename : content/media/webrtc/AudioOutputObserver.h => dom/media/webrtc/AudioOutputObserver.h rename : content/media/webrtc/MediaEngine.h => dom/media/webrtc/MediaEngine.h rename : content/media/webrtc/MediaEngineCameraVideoSource.cpp => dom/media/webrtc/MediaEngineCameraVideoSource.cpp rename : content/media/webrtc/MediaEngineCameraVideoSource.h => dom/media/webrtc/MediaEngineCameraVideoSource.h rename : content/media/webrtc/MediaEngineDefault.cpp => dom/media/webrtc/MediaEngineDefault.cpp rename : content/media/webrtc/MediaEngineDefault.h => dom/media/webrtc/MediaEngineDefault.h rename : content/media/webrtc/MediaEngineGonkVideoSource.cpp => dom/media/webrtc/MediaEngineGonkVideoSource.cpp rename : content/media/webrtc/MediaEngineGonkVideoSource.h => dom/media/webrtc/MediaEngineGonkVideoSource.h rename : content/media/webrtc/MediaEngineTabVideoSource.cpp => dom/media/webrtc/MediaEngineTabVideoSource.cpp rename : content/media/webrtc/MediaEngineTabVideoSource.h => dom/media/webrtc/MediaEngineTabVideoSource.h rename : content/media/webrtc/MediaEngineWebRTC.cpp => dom/media/webrtc/MediaEngineWebRTC.cpp rename : content/media/webrtc/MediaEngineWebRTC.h => dom/media/webrtc/MediaEngineWebRTC.h rename : content/media/webrtc/MediaEngineWebRTCAudio.cpp => dom/media/webrtc/MediaEngineWebRTCAudio.cpp rename : content/media/webrtc/MediaEngineWebRTCVideo.cpp => dom/media/webrtc/MediaEngineWebRTCVideo.cpp rename : content/media/webrtc/MediaTrackConstraints.h => dom/media/webrtc/MediaTrackConstraints.h rename : content/media/webrtc/PeerIdentity.cpp => dom/media/webrtc/PeerIdentity.cpp rename : content/media/webrtc/PeerIdentity.h => dom/media/webrtc/PeerIdentity.h rename : content/media/webrtc/moz.build => dom/media/webrtc/moz.build rename : content/media/webrtc/nsITabSource.idl => dom/media/webrtc/nsITabSource.idl rename : content/media/webspeech/moz.build => dom/media/webspeech/moz.build rename : content/media/webspeech/recognition/SpeechGrammar.cpp => dom/media/webspeech/recognition/SpeechGrammar.cpp rename : content/media/webspeech/recognition/SpeechGrammar.h => dom/media/webspeech/recognition/SpeechGrammar.h rename : content/media/webspeech/recognition/SpeechGrammarList.cpp => dom/media/webspeech/recognition/SpeechGrammarList.cpp rename : content/media/webspeech/recognition/SpeechGrammarList.h => dom/media/webspeech/recognition/SpeechGrammarList.h rename : content/media/webspeech/recognition/SpeechRecognition.cpp => dom/media/webspeech/recognition/SpeechRecognition.cpp rename : content/media/webspeech/recognition/SpeechRecognition.h => dom/media/webspeech/recognition/SpeechRecognition.h rename : content/media/webspeech/recognition/SpeechRecognitionAlternative.cpp => dom/media/webspeech/recognition/SpeechRecognitionAlternative.cpp rename : content/media/webspeech/recognition/SpeechRecognitionAlternative.h => dom/media/webspeech/recognition/SpeechRecognitionAlternative.h rename : content/media/webspeech/recognition/SpeechRecognitionResult.cpp => dom/media/webspeech/recognition/SpeechRecognitionResult.cpp rename : content/media/webspeech/recognition/SpeechRecognitionResult.h => dom/media/webspeech/recognition/SpeechRecognitionResult.h rename : content/media/webspeech/recognition/SpeechRecognitionResultList.cpp => dom/media/webspeech/recognition/SpeechRecognitionResultList.cpp rename : content/media/webspeech/recognition/SpeechRecognitionResultList.h => dom/media/webspeech/recognition/SpeechRecognitionResultList.h rename : content/media/webspeech/recognition/SpeechStreamListener.cpp => dom/media/webspeech/recognition/SpeechStreamListener.cpp rename : content/media/webspeech/recognition/SpeechStreamListener.h => dom/media/webspeech/recognition/SpeechStreamListener.h rename : content/media/webspeech/recognition/endpointer.cc => dom/media/webspeech/recognition/endpointer.cc rename : content/media/webspeech/recognition/endpointer.h => dom/media/webspeech/recognition/endpointer.h rename : content/media/webspeech/recognition/energy_endpointer.cc => dom/media/webspeech/recognition/energy_endpointer.cc rename : content/media/webspeech/recognition/energy_endpointer.h => dom/media/webspeech/recognition/energy_endpointer.h rename : content/media/webspeech/recognition/energy_endpointer_params.cc => dom/media/webspeech/recognition/energy_endpointer_params.cc rename : content/media/webspeech/recognition/energy_endpointer_params.h => dom/media/webspeech/recognition/energy_endpointer_params.h rename : content/media/webspeech/recognition/moz.build => dom/media/webspeech/recognition/moz.build rename : content/media/webspeech/recognition/nsISpeechRecognitionService.idl => dom/media/webspeech/recognition/nsISpeechRecognitionService.idl rename : content/media/webspeech/recognition/test/FakeSpeechRecognitionService.cpp => dom/media/webspeech/recognition/test/FakeSpeechRecognitionService.cpp rename : content/media/webspeech/recognition/test/FakeSpeechRecognitionService.h => dom/media/webspeech/recognition/test/FakeSpeechRecognitionService.h rename : content/media/webspeech/recognition/test/head.js => dom/media/webspeech/recognition/test/head.js rename : content/media/webspeech/recognition/test/hello.ogg => dom/media/webspeech/recognition/test/hello.ogg rename : content/media/webspeech/recognition/test/hello.ogg^headers^ => dom/media/webspeech/recognition/test/hello.ogg^headers^ rename : content/media/webspeech/recognition/test/mochitest.ini => dom/media/webspeech/recognition/test/mochitest.ini rename : content/media/webspeech/recognition/test/silence.ogg => dom/media/webspeech/recognition/test/silence.ogg rename : content/media/webspeech/recognition/test/silence.ogg^headers^ => dom/media/webspeech/recognition/test/silence.ogg^headers^ rename : content/media/webspeech/recognition/test/test_abort.html => dom/media/webspeech/recognition/test/test_abort.html rename : content/media/webspeech/recognition/test/test_audio_capture_error.html => dom/media/webspeech/recognition/test/test_audio_capture_error.html rename : content/media/webspeech/recognition/test/test_call_start_from_end_handler.html => dom/media/webspeech/recognition/test/test_call_start_from_end_handler.html rename : content/media/webspeech/recognition/test/test_nested_eventloop.html => dom/media/webspeech/recognition/test/test_nested_eventloop.html rename : content/media/webspeech/recognition/test/test_preference_enable.html => dom/media/webspeech/recognition/test/test_preference_enable.html rename : content/media/webspeech/recognition/test/test_recognition_service_error.html => dom/media/webspeech/recognition/test/test_recognition_service_error.html rename : content/media/webspeech/recognition/test/test_success_without_recognition_service.html => dom/media/webspeech/recognition/test/test_success_without_recognition_service.html rename : content/media/webspeech/recognition/test/test_timeout.html => dom/media/webspeech/recognition/test/test_timeout.html rename : content/media/webspeech/synth/SpeechSynthesis.cpp => dom/media/webspeech/synth/SpeechSynthesis.cpp rename : content/media/webspeech/synth/SpeechSynthesis.h => dom/media/webspeech/synth/SpeechSynthesis.h rename : content/media/webspeech/synth/SpeechSynthesisUtterance.cpp => dom/media/webspeech/synth/SpeechSynthesisUtterance.cpp rename : content/media/webspeech/synth/SpeechSynthesisUtterance.h => dom/media/webspeech/synth/SpeechSynthesisUtterance.h rename : content/media/webspeech/synth/SpeechSynthesisVoice.cpp => dom/media/webspeech/synth/SpeechSynthesisVoice.cpp rename : content/media/webspeech/synth/SpeechSynthesisVoice.h => dom/media/webspeech/synth/SpeechSynthesisVoice.h rename : content/media/webspeech/synth/ipc/PSpeechSynthesis.ipdl => dom/media/webspeech/synth/ipc/PSpeechSynthesis.ipdl rename : content/media/webspeech/synth/ipc/PSpeechSynthesisRequest.ipdl => dom/media/webspeech/synth/ipc/PSpeechSynthesisRequest.ipdl rename : content/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp => dom/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp rename : content/media/webspeech/synth/ipc/SpeechSynthesisChild.h => dom/media/webspeech/synth/ipc/SpeechSynthesisChild.h rename : content/media/webspeech/synth/ipc/SpeechSynthesisParent.cpp => dom/media/webspeech/synth/ipc/SpeechSynthesisParent.cpp rename : content/media/webspeech/synth/ipc/SpeechSynthesisParent.h => dom/media/webspeech/synth/ipc/SpeechSynthesisParent.h rename : content/media/webspeech/synth/ipc/test/file_ipc.html => dom/media/webspeech/synth/ipc/test/file_ipc.html rename : content/media/webspeech/synth/ipc/test/mochitest.ini => dom/media/webspeech/synth/ipc/test/mochitest.ini rename : content/media/webspeech/synth/ipc/test/test_ipc.html => dom/media/webspeech/synth/ipc/test/test_ipc.html rename : content/media/webspeech/synth/moz.build => dom/media/webspeech/synth/moz.build rename : content/media/webspeech/synth/nsISpeechService.idl => dom/media/webspeech/synth/nsISpeechService.idl rename : content/media/webspeech/synth/nsISynthVoiceRegistry.idl => dom/media/webspeech/synth/nsISynthVoiceRegistry.idl rename : content/media/webspeech/synth/nsSpeechTask.cpp => dom/media/webspeech/synth/nsSpeechTask.cpp rename : content/media/webspeech/synth/nsSpeechTask.h => dom/media/webspeech/synth/nsSpeechTask.h rename : content/media/webspeech/synth/nsSynthVoiceRegistry.cpp => dom/media/webspeech/synth/nsSynthVoiceRegistry.cpp rename : content/media/webspeech/synth/nsSynthVoiceRegistry.h => dom/media/webspeech/synth/nsSynthVoiceRegistry.h rename : content/media/webspeech/synth/pico/PicoModule.cpp => dom/media/webspeech/synth/pico/PicoModule.cpp rename : content/media/webspeech/synth/pico/moz.build => dom/media/webspeech/synth/pico/moz.build rename : content/media/webspeech/synth/pico/nsPicoService.cpp => dom/media/webspeech/synth/pico/nsPicoService.cpp rename : content/media/webspeech/synth/pico/nsPicoService.h => dom/media/webspeech/synth/pico/nsPicoService.h rename : content/media/webspeech/synth/test/common.js => dom/media/webspeech/synth/test/common.js rename : content/media/webspeech/synth/test/file_setup.html => dom/media/webspeech/synth/test/file_setup.html rename : content/media/webspeech/synth/test/file_speech_queue.html => dom/media/webspeech/synth/test/file_speech_queue.html rename : content/media/webspeech/synth/test/file_speech_simple.html => dom/media/webspeech/synth/test/file_speech_simple.html rename : content/media/webspeech/synth/test/mochitest.ini => dom/media/webspeech/synth/test/mochitest.ini rename : content/media/webspeech/synth/test/test_setup.html => dom/media/webspeech/synth/test/test_setup.html rename : content/media/webspeech/synth/test/test_speech_queue.html => dom/media/webspeech/synth/test/test_speech_queue.html rename : content/media/webspeech/synth/test/test_speech_simple.html => dom/media/webspeech/synth/test/test_speech_simple.html rename : content/media/webvtt/WebVTT.manifest => dom/media/webvtt/WebVTT.manifest rename : content/media/webvtt/WebVTTParserWrapper.js => dom/media/webvtt/WebVTTParserWrapper.js rename : content/media/webvtt/moz.build => dom/media/webvtt/moz.build rename : content/media/webvtt/nsIWebVTTListener.idl => dom/media/webvtt/nsIWebVTTListener.idl rename : content/media/webvtt/nsIWebVTTParserWrapper.idl => dom/media/webvtt/nsIWebVTTParserWrapper.idl rename : content/media/webvtt/package.json => dom/media/webvtt/package.json rename : content/media/webvtt/update-webvtt.js => dom/media/webvtt/update-webvtt.js rename : content/media/webvtt/vtt.jsm => dom/media/webvtt/vtt.jsm rename : content/media/wmf/DXVA2Manager.cpp => dom/media/wmf/DXVA2Manager.cpp rename : content/media/wmf/DXVA2Manager.h => dom/media/wmf/DXVA2Manager.h rename : content/media/wmf/WMF.h => dom/media/wmf/WMF.h rename : content/media/wmf/WMFByteStream.cpp => dom/media/wmf/WMFByteStream.cpp rename : content/media/wmf/WMFByteStream.h => dom/media/wmf/WMFByteStream.h rename : content/media/wmf/WMFDecoder.cpp => dom/media/wmf/WMFDecoder.cpp rename : content/media/wmf/WMFDecoder.h => dom/media/wmf/WMFDecoder.h rename : content/media/wmf/WMFReader.cpp => dom/media/wmf/WMFReader.cpp rename : content/media/wmf/WMFReader.h => dom/media/wmf/WMFReader.h rename : content/media/wmf/WMFSourceReaderCallback.cpp => dom/media/wmf/WMFSourceReaderCallback.cpp rename : content/media/wmf/WMFSourceReaderCallback.h => dom/media/wmf/WMFSourceReaderCallback.h rename : content/media/wmf/WMFUtils.cpp => dom/media/wmf/WMFUtils.cpp rename : content/media/wmf/WMFUtils.h => dom/media/wmf/WMFUtils.h rename : content/media/wmf/moz.build => dom/media/wmf/moz.build
2078 lines
71 KiB
C++
2078 lines
71 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/. */
|
|
|
|
#include "mozilla/DebugOnly.h"
|
|
|
|
#include "nsError.h"
|
|
#include "MediaDecoderStateMachine.h"
|
|
#include "MediaDecoder.h"
|
|
#include "OggReader.h"
|
|
#include "VideoUtils.h"
|
|
#include "theora/theoradec.h"
|
|
#include <algorithm>
|
|
#ifdef MOZ_OPUS
|
|
#include "opus/opus.h"
|
|
extern "C" {
|
|
#include "opus/opus_multistream.h"
|
|
}
|
|
#endif
|
|
#include "mozilla/dom/TimeRanges.h"
|
|
#include "mozilla/TimeStamp.h"
|
|
#include "VorbisUtils.h"
|
|
#include "MediaMetadataManager.h"
|
|
#include "nsISeekableStream.h"
|
|
#include "gfx2DGlue.h"
|
|
|
|
using namespace mozilla::gfx;
|
|
|
|
namespace mozilla {
|
|
|
|
// On B2G estimate the buffered ranges rather than calculating them explicitly.
|
|
// This prevents us doing I/O on the main thread, which is prohibited in B2G.
|
|
#ifdef MOZ_WIDGET_GONK
|
|
#define OGG_ESTIMATE_BUFFERED 1
|
|
#endif
|
|
|
|
// Un-comment to enable logging of seek bisections.
|
|
//#define SEEK_LOGGING
|
|
|
|
#ifdef PR_LOGGING
|
|
extern PRLogModuleInfo* gMediaDecoderLog;
|
|
#define LOG(type, msg) PR_LOG(gMediaDecoderLog, type, msg)
|
|
#ifdef SEEK_LOGGING
|
|
#define SEEK_LOG(type, msg) PR_LOG(gMediaDecoderLog, type, msg)
|
|
#else
|
|
#define SEEK_LOG(type, msg)
|
|
#endif
|
|
#else
|
|
#define LOG(type, msg)
|
|
#define SEEK_LOG(type, msg)
|
|
#endif
|
|
|
|
// The number of microseconds of "fuzz" we use in a bisection search over
|
|
// HTTP. When we're seeking with fuzz, we'll stop the search if a bisection
|
|
// lands between the seek target and SEEK_FUZZ_USECS microseconds before the
|
|
// seek target. This is becaue it's usually quicker to just keep downloading
|
|
// from an exisiting connection than to do another bisection inside that
|
|
// small range, which would open a new HTTP connetion.
|
|
static const uint32_t SEEK_FUZZ_USECS = 500000;
|
|
|
|
// The number of microseconds of "pre-roll" we use for Opus streams.
|
|
// The specification recommends 80 ms.
|
|
#ifdef MOZ_OPUS
|
|
static const int64_t SEEK_OPUS_PREROLL = 80 * USECS_PER_MS;
|
|
#endif /* MOZ_OPUS */
|
|
|
|
enum PageSyncResult {
|
|
PAGE_SYNC_ERROR = 1,
|
|
PAGE_SYNC_END_OF_RANGE= 2,
|
|
PAGE_SYNC_OK = 3
|
|
};
|
|
|
|
// Reads a page from the media resource.
|
|
static PageSyncResult
|
|
PageSync(MediaResource* aResource,
|
|
ogg_sync_state* aState,
|
|
bool aCachedDataOnly,
|
|
int64_t aOffset,
|
|
int64_t aEndOffset,
|
|
ogg_page* aPage,
|
|
int& aSkippedBytes);
|
|
|
|
// Chunk size to read when reading Ogg files. Average Ogg page length
|
|
// is about 4300 bytes, so we read the file in chunks larger than that.
|
|
static const int PAGE_STEP = 8192;
|
|
|
|
// Return the corresponding category in aKind based on the following specs.
|
|
// (https://www.whatwg.org/specs/web-apps/current-
|
|
// work/multipage/embedded-content.html#dom-audiotrack-kind) &
|
|
// (http://wiki.xiph.org/SkeletonHeaders)
|
|
static const nsString GetKind(const nsCString& aRole)
|
|
{
|
|
if (aRole.Find("audio/main") != -1 || aRole.Find("video/main") != -1) {
|
|
return NS_LITERAL_STRING("main");
|
|
} else if (aRole.Find("audio/alternate") != -1 ||
|
|
aRole.Find("video/alternate") != -1) {
|
|
return NS_LITERAL_STRING("alternative");
|
|
} else if (aRole.Find("audio/audiodesc") != -1) {
|
|
return NS_LITERAL_STRING("descriptions");
|
|
} else if (aRole.Find("audio/described") != -1) {
|
|
return NS_LITERAL_STRING("main-desc");
|
|
} else if (aRole.Find("audio/dub") != -1) {
|
|
return NS_LITERAL_STRING("translation");
|
|
} else if (aRole.Find("audio/commentary") != -1) {
|
|
return NS_LITERAL_STRING("commentary");
|
|
} else if (aRole.Find("video/sign") != -1) {
|
|
return NS_LITERAL_STRING("sign");
|
|
} else if (aRole.Find("video/captioned") != -1) {
|
|
return NS_LITERAL_STRING("captions");
|
|
} else if (aRole.Find("video/subtitled") != -1) {
|
|
return NS_LITERAL_STRING("subtitles");
|
|
}
|
|
return EmptyString();
|
|
}
|
|
|
|
static void InitTrack(MessageField* aMsgInfo, TrackInfo* aInfo, bool aEnable)
|
|
{
|
|
MOZ_ASSERT(aMsgInfo);
|
|
MOZ_ASSERT(aInfo);
|
|
|
|
nsCString* sName = aMsgInfo->mValuesStore.Get(eName);
|
|
nsCString* sRole = aMsgInfo->mValuesStore.Get(eRole);
|
|
nsCString* sTitle = aMsgInfo->mValuesStore.Get(eTitle);
|
|
nsCString* sLanguage = aMsgInfo->mValuesStore.Get(eLanguage);
|
|
aInfo->Init(sName? NS_ConvertUTF8toUTF16(*sName):EmptyString(),
|
|
sRole? GetKind(*sRole):EmptyString(),
|
|
sTitle? NS_ConvertUTF8toUTF16(*sTitle):EmptyString(),
|
|
sLanguage? NS_ConvertUTF8toUTF16(*sLanguage):EmptyString(),
|
|
aEnable);
|
|
}
|
|
|
|
OggReader::OggReader(AbstractMediaDecoder* aDecoder)
|
|
: MediaDecoderReader(aDecoder),
|
|
mMonitor("OggReader"),
|
|
mTheoraState(nullptr),
|
|
mVorbisState(nullptr),
|
|
#ifdef MOZ_OPUS
|
|
mOpusState(nullptr),
|
|
mOpusEnabled(MediaDecoder::IsOpusEnabled()),
|
|
#endif /* MOZ_OPUS */
|
|
mSkeletonState(nullptr),
|
|
mVorbisSerial(0),
|
|
mOpusSerial(0),
|
|
mTheoraSerial(0),
|
|
mOpusPreSkip(0),
|
|
mIsChained(false),
|
|
mDecodedAudioFrames(0)
|
|
{
|
|
MOZ_COUNT_CTOR(OggReader);
|
|
memset(&mTheoraInfo, 0, sizeof(mTheoraInfo));
|
|
}
|
|
|
|
OggReader::~OggReader()
|
|
{
|
|
ogg_sync_clear(&mOggState);
|
|
MOZ_COUNT_DTOR(OggReader);
|
|
}
|
|
|
|
nsresult OggReader::Init(MediaDecoderReader* aCloneDonor) {
|
|
int ret = ogg_sync_init(&mOggState);
|
|
NS_ENSURE_TRUE(ret == 0, NS_ERROR_FAILURE);
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult OggReader::ResetDecode()
|
|
{
|
|
return ResetDecode(false);
|
|
}
|
|
|
|
nsresult OggReader::ResetDecode(bool start)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
nsresult res = NS_OK;
|
|
|
|
if (NS_FAILED(MediaDecoderReader::ResetDecode())) {
|
|
res = NS_ERROR_FAILURE;
|
|
}
|
|
|
|
// Discard any previously buffered packets/pages.
|
|
ogg_sync_reset(&mOggState);
|
|
if (mVorbisState && NS_FAILED(mVorbisState->Reset())) {
|
|
res = NS_ERROR_FAILURE;
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
if (mOpusState && NS_FAILED(mOpusState->Reset(start))) {
|
|
res = NS_ERROR_FAILURE;
|
|
}
|
|
#endif /* MOZ_OPUS */
|
|
if (mTheoraState && NS_FAILED(mTheoraState->Reset())) {
|
|
res = NS_ERROR_FAILURE;
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
bool OggReader::ReadHeaders(OggCodecState* aState)
|
|
{
|
|
while (!aState->DoneReadingHeaders()) {
|
|
ogg_packet* packet = NextOggPacket(aState);
|
|
// DecodeHeader is responsible for releasing packet.
|
|
if (!packet || !aState->DecodeHeader(packet)) {
|
|
aState->Deactivate();
|
|
return false;
|
|
}
|
|
}
|
|
return aState->Init();
|
|
}
|
|
|
|
void OggReader::BuildSerialList(nsTArray<uint32_t>& aTracks)
|
|
{
|
|
// Obtaining seek index information for currently active bitstreams.
|
|
if (HasVideo()) {
|
|
aTracks.AppendElement(mTheoraState->mSerial);
|
|
}
|
|
if (HasAudio()) {
|
|
if (mVorbisState) {
|
|
aTracks.AppendElement(mVorbisState->mSerial);
|
|
#ifdef MOZ_OPUS
|
|
} else if (mOpusState) {
|
|
aTracks.AppendElement(mOpusState->mSerial);
|
|
#endif /* MOZ_OPUS */
|
|
}
|
|
}
|
|
}
|
|
|
|
void OggReader::SetupTargetTheora(TheoraState* aTheoraState)
|
|
{
|
|
if (mTheoraState) {
|
|
mTheoraState->Reset();
|
|
}
|
|
nsIntRect picture = nsIntRect(aTheoraState->mInfo.pic_x,
|
|
aTheoraState->mInfo.pic_y,
|
|
aTheoraState->mInfo.pic_width,
|
|
aTheoraState->mInfo.pic_height);
|
|
|
|
nsIntSize displaySize = nsIntSize(aTheoraState->mInfo.pic_width,
|
|
aTheoraState->mInfo.pic_height);
|
|
|
|
// Apply the aspect ratio to produce the intrinsic display size we report
|
|
// to the element.
|
|
ScaleDisplayByAspectRatio(displaySize, aTheoraState->mPixelAspectRatio);
|
|
|
|
nsIntSize frameSize(aTheoraState->mInfo.frame_width,
|
|
aTheoraState->mInfo.frame_height);
|
|
if (IsValidVideoRegion(frameSize, picture, displaySize)) {
|
|
// Video track's frame sizes will not overflow. Activate the video track.
|
|
mPicture = picture;
|
|
|
|
VideoFrameContainer* container = mDecoder->GetVideoFrameContainer();
|
|
if (container) {
|
|
container->SetCurrentFrame(gfxIntSize(displaySize.width, displaySize.height),
|
|
nullptr,
|
|
TimeStamp::Now());
|
|
}
|
|
|
|
// Copy Theora info data for time computations on other threads.
|
|
memcpy(&mTheoraInfo, &aTheoraState->mInfo, sizeof(mTheoraInfo));
|
|
|
|
mTheoraState = aTheoraState;
|
|
mTheoraSerial = aTheoraState->mSerial;
|
|
}
|
|
}
|
|
|
|
void OggReader::SetupTargetVorbis(VorbisState* aVorbisState)
|
|
{
|
|
if (mVorbisState) {
|
|
mVorbisState->Reset();
|
|
}
|
|
// Copy Vorbis info data for time computations on other threads.
|
|
memcpy(&mVorbisInfo, &aVorbisState->mInfo, sizeof(mVorbisInfo));
|
|
mVorbisInfo.codec_setup = nullptr;
|
|
mVorbisState = aVorbisState;
|
|
mVorbisSerial = aVorbisState->mSerial;
|
|
}
|
|
|
|
void OggReader::SetupTargetOpus(OpusState* aOpusState)
|
|
{
|
|
if (mOpusState) {
|
|
mOpusState->Reset();
|
|
}
|
|
mOpusState = aOpusState;
|
|
mOpusSerial = aOpusState->mSerial;
|
|
mOpusPreSkip = aOpusState->mPreSkip;
|
|
}
|
|
|
|
void OggReader::SetupTargetSkeleton(SkeletonState* aSkeletonState)
|
|
{
|
|
// Setup skeleton related information after mVorbisState & mTheroState
|
|
// being set (if they exist).
|
|
if (aSkeletonState) {
|
|
if (!HasAudio() && !HasVideo()) {
|
|
// We have a skeleton track, but no audio or video, may as well disable
|
|
// the skeleton, we can't do anything useful with this media.
|
|
aSkeletonState->Deactivate();
|
|
} else if (ReadHeaders(aSkeletonState) && aSkeletonState->HasIndex()) {
|
|
// Extract the duration info out of the index, so we don't need to seek to
|
|
// the end of resource to get it.
|
|
nsAutoTArray<uint32_t, 2> tracks;
|
|
BuildSerialList(tracks);
|
|
int64_t duration = 0;
|
|
if (NS_SUCCEEDED(aSkeletonState->GetDuration(tracks, duration))) {
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
mDecoder->SetMediaDuration(duration);
|
|
LOG(PR_LOG_DEBUG, ("Got duration from Skeleton index %lld", duration));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void OggReader::SetupMediaTracksInfo(const nsTArray<uint32_t>& aSerials)
|
|
{
|
|
// For each serial number
|
|
// 1. Retrieve a codecState from mCodecStore by this serial number.
|
|
// 2. Retrieve a message field from mMsgFieldStore by this serial number.
|
|
// 3. For now, skip if the serial number refers to a non-primary bitstream.
|
|
// 4. Setup track and other audio/video related information per different types.
|
|
for (size_t i = 0; i < aSerials.Length(); i++) {
|
|
uint32_t serial = aSerials[i];
|
|
OggCodecState* codecState = mCodecStore.Get(serial);
|
|
|
|
MessageField* msgInfo = nullptr;
|
|
if (mSkeletonState && mSkeletonState->mMsgFieldStore.Contains(serial)) {
|
|
mSkeletonState->mMsgFieldStore.Get(serial, &msgInfo);
|
|
}
|
|
|
|
if (codecState->GetType() == OggCodecState::TYPE_THEORA) {
|
|
TheoraState* theoraState = static_cast<TheoraState*>(codecState);
|
|
if (!(mTheoraState && mTheoraState->mSerial == theoraState->mSerial)) {
|
|
continue;
|
|
}
|
|
|
|
if (msgInfo) {
|
|
InitTrack(msgInfo, &mInfo.mVideo.mTrackInfo, mTheoraState == theoraState);
|
|
}
|
|
|
|
nsIntRect picture = nsIntRect(theoraState->mInfo.pic_x,
|
|
theoraState->mInfo.pic_y,
|
|
theoraState->mInfo.pic_width,
|
|
theoraState->mInfo.pic_height);
|
|
nsIntSize displaySize = nsIntSize(theoraState->mInfo.pic_width,
|
|
theoraState->mInfo.pic_height);
|
|
nsIntSize frameSize(theoraState->mInfo.frame_width,
|
|
theoraState->mInfo.frame_height);
|
|
ScaleDisplayByAspectRatio(displaySize, theoraState->mPixelAspectRatio);
|
|
mInfo.mVideo.mDisplay = displaySize;
|
|
mInfo.mVideo.mHasVideo = IsValidVideoRegion(frameSize, picture, displaySize)? true:false;
|
|
} else if (codecState->GetType() == OggCodecState::TYPE_VORBIS) {
|
|
VorbisState* vorbisState = static_cast<VorbisState*>(codecState);
|
|
if (!(mVorbisState && mVorbisState->mSerial == vorbisState->mSerial)) {
|
|
continue;
|
|
}
|
|
|
|
if (msgInfo) {
|
|
InitTrack(msgInfo, &mInfo.mAudio.mTrackInfo, mVorbisState == vorbisState);
|
|
}
|
|
|
|
mInfo.mAudio.mHasAudio = true;
|
|
mInfo.mAudio.mRate = vorbisState->mInfo.rate;
|
|
mInfo.mAudio.mChannels = vorbisState->mInfo.channels;
|
|
#ifdef MOZ_OPUS
|
|
} else if (codecState->GetType() == OggCodecState::TYPE_OPUS) {
|
|
OpusState* opusState = static_cast<OpusState*>(codecState);
|
|
if (!(mOpusState && mOpusState->mSerial == opusState->mSerial)) {
|
|
continue;
|
|
}
|
|
|
|
if (msgInfo) {
|
|
InitTrack(msgInfo, &mInfo.mAudio.mTrackInfo, mOpusState == opusState);
|
|
}
|
|
|
|
mInfo.mAudio.mHasAudio = true;
|
|
mInfo.mAudio.mRate = opusState->mRate;
|
|
mInfo.mAudio.mChannels = opusState->mChannels;
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
nsresult OggReader::ReadMetadata(MediaInfo* aInfo,
|
|
MetadataTags** aTags)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
|
|
// We read packets until all bitstreams have read all their header packets.
|
|
// We record the offset of the first non-header page so that we know
|
|
// what page to seek to when seeking to the media start.
|
|
|
|
NS_ASSERTION(aTags, "Called with null MetadataTags**.");
|
|
*aTags = nullptr;
|
|
|
|
ogg_page page;
|
|
nsAutoTArray<OggCodecState*,4> bitstreams;
|
|
nsTArray<uint32_t> serials;
|
|
bool readAllBOS = false;
|
|
while (!readAllBOS) {
|
|
if (!ReadOggPage(&page)) {
|
|
// Some kind of error...
|
|
break;
|
|
}
|
|
|
|
int serial = ogg_page_serialno(&page);
|
|
OggCodecState* codecState = 0;
|
|
|
|
if (!ogg_page_bos(&page)) {
|
|
// We've encountered a non Beginning Of Stream page. No more BOS pages
|
|
// can follow in this Ogg segment, so there will be no other bitstreams
|
|
// in the Ogg (unless it's invalid).
|
|
readAllBOS = true;
|
|
} else if (!mCodecStore.Contains(serial)) {
|
|
// We've not encountered a stream with this serial number before. Create
|
|
// an OggCodecState to demux it, and map that to the OggCodecState
|
|
// in mCodecStates.
|
|
codecState = OggCodecState::Create(&page);
|
|
mCodecStore.Add(serial, codecState);
|
|
bitstreams.AppendElement(codecState);
|
|
serials.AppendElement(serial);
|
|
}
|
|
|
|
codecState = mCodecStore.Get(serial);
|
|
NS_ENSURE_TRUE(codecState != nullptr, NS_ERROR_FAILURE);
|
|
|
|
if (NS_FAILED(codecState->PageIn(&page))) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
}
|
|
|
|
// We've read all BOS pages, so we know the streams contained in the media.
|
|
// 1. Process all available header packets in the Theora, Vorbis/Opus bitstreams.
|
|
// 2. Find the first encountered Theora/Vorbis/Opus bitstream, and configure
|
|
// it as the target A/V bitstream.
|
|
// 3. Deactivate the rest of bitstreams for now, until we have MediaInfo
|
|
// support multiple track infos.
|
|
for (uint32_t i = 0; i < bitstreams.Length(); ++i) {
|
|
OggCodecState* s = bitstreams[i];
|
|
if (s) {
|
|
if (s->GetType() == OggCodecState::TYPE_THEORA && ReadHeaders(s)) {
|
|
if (!mTheoraState) {
|
|
TheoraState* theoraState = static_cast<TheoraState*>(s);
|
|
SetupTargetTheora(theoraState);
|
|
} else {
|
|
s->Deactivate();
|
|
}
|
|
} else if (s->GetType() == OggCodecState::TYPE_VORBIS && ReadHeaders(s)) {
|
|
if (!mVorbisState) {
|
|
VorbisState* vorbisState = static_cast<VorbisState*>(s);
|
|
SetupTargetVorbis(vorbisState);
|
|
*aTags = vorbisState->GetTags();
|
|
} else {
|
|
s->Deactivate();
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
} else if (s->GetType() == OggCodecState::TYPE_OPUS && ReadHeaders(s)) {
|
|
if (mOpusEnabled) {
|
|
if (!mOpusState) {
|
|
OpusState* opusState = static_cast<OpusState*>(s);
|
|
SetupTargetOpus(opusState);
|
|
*aTags = opusState->GetTags();
|
|
} else {
|
|
s->Deactivate();
|
|
}
|
|
} else {
|
|
NS_WARNING("Opus decoding disabled."
|
|
" See media.opus.enabled in about:config");
|
|
}
|
|
#endif // MOZ_OPUS
|
|
} else if (s->GetType() == OggCodecState::TYPE_SKELETON && !mSkeletonState) {
|
|
mSkeletonState = static_cast<SkeletonState*>(s);
|
|
} else {
|
|
// Deactivate any non-primary bitstreams.
|
|
s->Deactivate();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
SetupTargetSkeleton(mSkeletonState);
|
|
SetupMediaTracksInfo(serials);
|
|
|
|
if (HasAudio() || HasVideo()) {
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
if (mDecoder->GetMediaDuration() == -1 &&
|
|
!mDecoder->IsShutdown() &&
|
|
resource->GetLength() >= 0 &&
|
|
mDecoder->IsMediaSeekable())
|
|
{
|
|
// We didn't get a duration from the index or a Content-Duration header.
|
|
// Seek to the end of file to find the end time.
|
|
int64_t length = resource->GetLength();
|
|
|
|
NS_ASSERTION(length > 0, "Must have a content length to get end time");
|
|
|
|
int64_t endTime = 0;
|
|
{
|
|
ReentrantMonitorAutoExit exitMon(mDecoder->GetReentrantMonitor());
|
|
endTime = RangeEndTime(length);
|
|
}
|
|
if (endTime != -1) {
|
|
mDecoder->SetMediaEndTime(endTime);
|
|
LOG(PR_LOG_DEBUG, ("Got Ogg duration from seeking to end %lld", endTime));
|
|
}
|
|
}
|
|
} else {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
*aInfo = mInfo;
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
bool
|
|
OggReader::IsMediaSeekable()
|
|
{
|
|
if (mIsChained) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
nsresult OggReader::DecodeVorbis(ogg_packet* aPacket) {
|
|
NS_ASSERTION(aPacket->granulepos != -1, "Must know vorbis granulepos!");
|
|
|
|
if (vorbis_synthesis(&mVorbisState->mBlock, aPacket) != 0) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
if (vorbis_synthesis_blockin(&mVorbisState->mDsp,
|
|
&mVorbisState->mBlock) != 0)
|
|
{
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
VorbisPCMValue** pcm = 0;
|
|
int32_t frames = 0;
|
|
uint32_t channels = mVorbisState->mInfo.channels;
|
|
ogg_int64_t endFrame = aPacket->granulepos;
|
|
while ((frames = vorbis_synthesis_pcmout(&mVorbisState->mDsp, &pcm)) > 0) {
|
|
mVorbisState->ValidateVorbisPacketSamples(aPacket, frames);
|
|
nsAutoArrayPtr<AudioDataValue> buffer(new AudioDataValue[frames * channels]);
|
|
for (uint32_t j = 0; j < channels; ++j) {
|
|
VorbisPCMValue* channel = pcm[j];
|
|
for (uint32_t i = 0; i < uint32_t(frames); ++i) {
|
|
buffer[i*channels + j] = MOZ_CONVERT_VORBIS_SAMPLE(channel[i]);
|
|
}
|
|
}
|
|
|
|
// No channel mapping for more than 8 channels.
|
|
if (channels > 8) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
int64_t duration = mVorbisState->Time((int64_t)frames);
|
|
int64_t startTime = mVorbisState->Time(endFrame - frames);
|
|
mAudioQueue.Push(new AudioData(mDecoder->GetResource()->Tell(),
|
|
startTime,
|
|
duration,
|
|
frames,
|
|
buffer.forget(),
|
|
channels,
|
|
mVorbisState->mInfo.rate));
|
|
|
|
mDecodedAudioFrames += frames;
|
|
|
|
endFrame -= frames;
|
|
if (vorbis_synthesis_read(&mVorbisState->mDsp, frames) != 0) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
}
|
|
return NS_OK;
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
nsresult OggReader::DecodeOpus(ogg_packet* aPacket) {
|
|
NS_ASSERTION(aPacket->granulepos != -1, "Must know opus granulepos!");
|
|
|
|
// Maximum value is 63*2880, so there's no chance of overflow.
|
|
int32_t frames_number = opus_packet_get_nb_frames(aPacket->packet,
|
|
aPacket->bytes);
|
|
if (frames_number <= 0)
|
|
return NS_ERROR_FAILURE; // Invalid packet header.
|
|
int32_t samples = opus_packet_get_samples_per_frame(aPacket->packet,
|
|
(opus_int32) mOpusState->mRate);
|
|
int32_t frames = frames_number*samples;
|
|
|
|
// A valid Opus packet must be between 2.5 and 120 ms long.
|
|
if (frames < 120 || frames > 5760)
|
|
return NS_ERROR_FAILURE;
|
|
uint32_t channels = mOpusState->mChannels;
|
|
nsAutoArrayPtr<AudioDataValue> buffer(new AudioDataValue[frames * channels]);
|
|
|
|
// Decode to the appropriate sample type.
|
|
#ifdef MOZ_SAMPLE_TYPE_FLOAT32
|
|
int ret = opus_multistream_decode_float(mOpusState->mDecoder,
|
|
aPacket->packet, aPacket->bytes,
|
|
buffer, frames, false);
|
|
#else
|
|
int ret = opus_multistream_decode(mOpusState->mDecoder,
|
|
aPacket->packet, aPacket->bytes,
|
|
buffer, frames, false);
|
|
#endif
|
|
if (ret < 0)
|
|
return NS_ERROR_FAILURE;
|
|
NS_ASSERTION(ret == frames, "Opus decoded too few audio samples");
|
|
|
|
int64_t endFrame = aPacket->granulepos;
|
|
int64_t startFrame;
|
|
// If this is the last packet, perform end trimming.
|
|
if (aPacket->e_o_s && mOpusState->mPrevPacketGranulepos != -1) {
|
|
startFrame = mOpusState->mPrevPacketGranulepos;
|
|
frames = static_cast<int32_t>(std::max(static_cast<int64_t>(0),
|
|
std::min(endFrame - startFrame,
|
|
static_cast<int64_t>(frames))));
|
|
} else {
|
|
startFrame = endFrame - frames;
|
|
}
|
|
|
|
// Trim the initial frames while the decoder is settling.
|
|
if (mOpusState->mSkip > 0) {
|
|
int32_t skipFrames = std::min(mOpusState->mSkip, frames);
|
|
if (skipFrames == frames) {
|
|
// discard the whole packet
|
|
mOpusState->mSkip -= frames;
|
|
LOG(PR_LOG_DEBUG, ("Opus decoder skipping %d frames"
|
|
" (whole packet)", frames));
|
|
return NS_OK;
|
|
}
|
|
int32_t keepFrames = frames - skipFrames;
|
|
int samples = keepFrames * channels;
|
|
nsAutoArrayPtr<AudioDataValue> trimBuffer(new AudioDataValue[samples]);
|
|
for (int i = 0; i < samples; i++)
|
|
trimBuffer[i] = buffer[skipFrames*channels + i];
|
|
|
|
startFrame = endFrame - keepFrames;
|
|
frames = keepFrames;
|
|
buffer = trimBuffer;
|
|
|
|
mOpusState->mSkip -= skipFrames;
|
|
LOG(PR_LOG_DEBUG, ("Opus decoder skipping %d frames", skipFrames));
|
|
}
|
|
// Save this packet's granule position in case we need to perform end
|
|
// trimming on the next packet.
|
|
mOpusState->mPrevPacketGranulepos = endFrame;
|
|
|
|
// Apply the header gain if one was specified.
|
|
#ifdef MOZ_SAMPLE_TYPE_FLOAT32
|
|
if (mOpusState->mGain != 1.0f) {
|
|
float gain = mOpusState->mGain;
|
|
int samples = frames * channels;
|
|
for (int i = 0; i < samples; i++) {
|
|
buffer[i] *= gain;
|
|
}
|
|
}
|
|
#else
|
|
if (mOpusState->mGain_Q16 != 65536) {
|
|
int64_t gain_Q16 = mOpusState->mGain_Q16;
|
|
int samples = frames * channels;
|
|
for (int i = 0; i < samples; i++) {
|
|
int32_t val = static_cast<int32_t>((gain_Q16*buffer[i] + 32768)>>16);
|
|
buffer[i] = static_cast<AudioDataValue>(MOZ_CLIP_TO_15(val));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// No channel mapping for more than 8 channels.
|
|
if (channels > 8) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
LOG(PR_LOG_DEBUG, ("Opus decoder pushing %d frames", frames));
|
|
int64_t startTime = mOpusState->Time(startFrame);
|
|
int64_t endTime = mOpusState->Time(endFrame);
|
|
mAudioQueue.Push(new AudioData(mDecoder->GetResource()->Tell(),
|
|
startTime,
|
|
endTime - startTime,
|
|
frames,
|
|
buffer.forget(),
|
|
channels,
|
|
mOpusState->mRate));
|
|
|
|
mDecodedAudioFrames += frames;
|
|
|
|
return NS_OK;
|
|
}
|
|
#endif /* MOZ_OPUS */
|
|
|
|
bool OggReader::DecodeAudioData()
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
DebugOnly<bool> haveCodecState = mVorbisState != nullptr
|
|
#ifdef MOZ_OPUS
|
|
|| mOpusState != nullptr
|
|
#endif /* MOZ_OPUS */
|
|
;
|
|
NS_ASSERTION(haveCodecState, "Need audio codec state to decode audio");
|
|
|
|
// Read the next data packet. Skip any non-data packets we encounter.
|
|
ogg_packet* packet = 0;
|
|
OggCodecState* codecState;
|
|
if (mVorbisState)
|
|
codecState = static_cast<OggCodecState*>(mVorbisState);
|
|
#ifdef MOZ_OPUS
|
|
else
|
|
codecState = static_cast<OggCodecState*>(mOpusState);
|
|
#endif /* MOZ_OPUS */
|
|
do {
|
|
if (packet) {
|
|
OggCodecState::ReleasePacket(packet);
|
|
}
|
|
packet = NextOggPacket(codecState);
|
|
} while (packet && codecState->IsHeader(packet));
|
|
|
|
if (!packet) {
|
|
return false;
|
|
}
|
|
|
|
NS_ASSERTION(packet && packet->granulepos != -1,
|
|
"Must have packet with known granulepos");
|
|
nsAutoRef<ogg_packet> autoRelease(packet);
|
|
if (mVorbisState) {
|
|
DecodeVorbis(packet);
|
|
#ifdef MOZ_OPUS
|
|
} else if (mOpusState) {
|
|
DecodeOpus(packet);
|
|
#endif
|
|
}
|
|
|
|
if ((packet->e_o_s) && (!ReadOggChain())) {
|
|
// We've encountered an end of bitstream packet, or we've hit the end of
|
|
// file while trying to decode, so inform the audio queue that there'll
|
|
// be no more samples.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void OggReader::SetChained(bool aIsChained) {
|
|
{
|
|
ReentrantMonitorAutoEnter mon(mMonitor);
|
|
mIsChained = aIsChained;
|
|
}
|
|
{
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
mDecoder->SetMediaSeekable(false);
|
|
}
|
|
}
|
|
|
|
bool OggReader::ReadOggChain()
|
|
{
|
|
bool chained = false;
|
|
#ifdef MOZ_OPUS
|
|
OpusState* newOpusState = nullptr;
|
|
#endif /* MOZ_OPUS */
|
|
VorbisState* newVorbisState = nullptr;
|
|
MetadataTags* tags = nullptr;
|
|
|
|
if (HasVideo() || HasSkeleton() || !HasAudio()) {
|
|
return false;
|
|
}
|
|
|
|
ogg_page page;
|
|
if (!ReadOggPage(&page) || !ogg_page_bos(&page)) {
|
|
return false;
|
|
}
|
|
|
|
int serial = ogg_page_serialno(&page);
|
|
if (mCodecStore.Contains(serial)) {
|
|
return false;
|
|
}
|
|
|
|
nsAutoPtr<OggCodecState> codecState;
|
|
codecState = OggCodecState::Create(&page);
|
|
if (!codecState) {
|
|
return false;
|
|
}
|
|
|
|
if (mVorbisState && (codecState->GetType() == OggCodecState::TYPE_VORBIS)) {
|
|
newVorbisState = static_cast<VorbisState*>(codecState.get());
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
else if (mOpusState && (codecState->GetType() == OggCodecState::TYPE_OPUS)) {
|
|
newOpusState = static_cast<OpusState*>(codecState.get());
|
|
}
|
|
#endif
|
|
else {
|
|
return false;
|
|
}
|
|
OggCodecState* state;
|
|
|
|
mCodecStore.Add(serial, codecState.forget());
|
|
state = mCodecStore.Get(serial);
|
|
|
|
NS_ENSURE_TRUE(state != nullptr, false);
|
|
|
|
if (NS_FAILED(state->PageIn(&page))) {
|
|
return false;
|
|
}
|
|
|
|
MessageField* msgInfo = nullptr;
|
|
if (mSkeletonState && mSkeletonState->mMsgFieldStore.Contains(serial)) {
|
|
mSkeletonState->mMsgFieldStore.Get(serial, &msgInfo);
|
|
}
|
|
|
|
if ((newVorbisState && ReadHeaders(newVorbisState)) &&
|
|
(mVorbisState->mInfo.rate == newVorbisState->mInfo.rate) &&
|
|
(mVorbisState->mInfo.channels == newVorbisState->mInfo.channels)) {
|
|
|
|
SetupTargetVorbis(newVorbisState);
|
|
LOG(PR_LOG_DEBUG, ("New vorbis ogg link, serial=%d\n", mVorbisSerial));
|
|
|
|
if (msgInfo) {
|
|
InitTrack(msgInfo, &mInfo.mAudio.mTrackInfo, true);
|
|
}
|
|
mInfo.mAudio.mRate = newVorbisState->mInfo.rate;
|
|
mInfo.mAudio.mChannels = newVorbisState->mInfo.channels;
|
|
|
|
chained = true;
|
|
tags = newVorbisState->GetTags();
|
|
}
|
|
|
|
#ifdef MOZ_OPUS
|
|
if ((newOpusState && ReadHeaders(newOpusState)) &&
|
|
(mOpusState->mRate == newOpusState->mRate) &&
|
|
(mOpusState->mChannels == newOpusState->mChannels)) {
|
|
|
|
SetupTargetOpus(newOpusState);
|
|
|
|
if (msgInfo) {
|
|
InitTrack(msgInfo, &mInfo.mAudio.mTrackInfo, true);
|
|
}
|
|
mInfo.mAudio.mRate = newOpusState->mRate;
|
|
mInfo.mAudio.mChannels = newOpusState->mChannels;
|
|
|
|
chained = true;
|
|
tags = newOpusState->GetTags();
|
|
}
|
|
#endif
|
|
|
|
if (chained) {
|
|
SetChained(true);
|
|
{
|
|
mInfo.mAudio.mHasAudio = HasAudio();
|
|
mInfo.mVideo.mHasVideo = HasVideo();
|
|
nsAutoPtr<MediaInfo> info(new MediaInfo());
|
|
*info = mInfo;
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
mDecoder->QueueMetadata((mDecodedAudioFrames * USECS_PER_S) / mInfo.mAudio.mRate,
|
|
info.forget(), tags);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
nsresult OggReader::DecodeTheora(ogg_packet* aPacket, int64_t aTimeThreshold)
|
|
{
|
|
NS_ASSERTION(aPacket->granulepos >= TheoraVersion(&mTheoraState->mInfo,3,2,1),
|
|
"Packets must have valid granulepos and packetno");
|
|
|
|
int ret = th_decode_packetin(mTheoraState->mCtx, aPacket, 0);
|
|
if (ret != 0 && ret != TH_DUPFRAME) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
int64_t time = mTheoraState->StartTime(aPacket->granulepos);
|
|
|
|
// Don't use the frame if it's outside the bounds of the presentation
|
|
// start time in the skeleton track. Note we still must submit the frame
|
|
// to the decoder (via th_decode_packetin), as the frames which are
|
|
// presentable may depend on this frame's data.
|
|
if (mSkeletonState && !mSkeletonState->IsPresentable(time)) {
|
|
return NS_OK;
|
|
}
|
|
|
|
int64_t endTime = mTheoraState->Time(aPacket->granulepos);
|
|
if (endTime < aTimeThreshold) {
|
|
// The end time of this frame is already before the current playback
|
|
// position. It will never be displayed, don't bother enqueing it.
|
|
return NS_OK;
|
|
}
|
|
|
|
if (ret == TH_DUPFRAME) {
|
|
VideoData* v = VideoData::CreateDuplicate(mDecoder->GetResource()->Tell(),
|
|
time,
|
|
endTime - time,
|
|
aPacket->granulepos);
|
|
mVideoQueue.Push(v);
|
|
} else if (ret == 0) {
|
|
th_ycbcr_buffer buffer;
|
|
ret = th_decode_ycbcr_out(mTheoraState->mCtx, buffer);
|
|
NS_ASSERTION(ret == 0, "th_decode_ycbcr_out failed");
|
|
bool isKeyframe = th_packet_iskeyframe(aPacket) == 1;
|
|
VideoData::YCbCrBuffer b;
|
|
for (uint32_t i=0; i < 3; ++i) {
|
|
b.mPlanes[i].mData = buffer[i].data;
|
|
b.mPlanes[i].mHeight = buffer[i].height;
|
|
b.mPlanes[i].mWidth = buffer[i].width;
|
|
b.mPlanes[i].mStride = buffer[i].stride;
|
|
b.mPlanes[i].mOffset = b.mPlanes[i].mSkip = 0;
|
|
}
|
|
|
|
VideoData *v = VideoData::Create(mInfo.mVideo,
|
|
mDecoder->GetImageContainer(),
|
|
mDecoder->GetResource()->Tell(),
|
|
time,
|
|
endTime - time,
|
|
b,
|
|
isKeyframe,
|
|
aPacket->granulepos,
|
|
ToIntRect(mPicture));
|
|
if (!v) {
|
|
// There may be other reasons for this error, but for
|
|
// simplicity just assume the worst case: out of memory.
|
|
NS_WARNING("Failed to allocate memory for video frame");
|
|
return NS_ERROR_OUT_OF_MEMORY;
|
|
}
|
|
mVideoQueue.Push(v);
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
bool OggReader::DecodeVideoFrame(bool &aKeyframeSkip,
|
|
int64_t aTimeThreshold)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
|
|
// Record number of frames decoded and parsed. Automatically update the
|
|
// stats counters using the AutoNotifyDecoded stack-based class.
|
|
uint32_t parsed = 0, decoded = 0;
|
|
AbstractMediaDecoder::AutoNotifyDecoded autoNotify(mDecoder, parsed, decoded);
|
|
|
|
// Read the next data packet. Skip any non-data packets we encounter.
|
|
ogg_packet* packet = 0;
|
|
do {
|
|
if (packet) {
|
|
OggCodecState::ReleasePacket(packet);
|
|
}
|
|
packet = NextOggPacket(mTheoraState);
|
|
} while (packet && mTheoraState->IsHeader(packet));
|
|
if (!packet) {
|
|
return false;
|
|
}
|
|
nsAutoRef<ogg_packet> autoRelease(packet);
|
|
|
|
parsed++;
|
|
NS_ASSERTION(packet && packet->granulepos != -1,
|
|
"Must know first packet's granulepos");
|
|
bool eos = packet->e_o_s;
|
|
int64_t frameEndTime = mTheoraState->Time(packet->granulepos);
|
|
if (!aKeyframeSkip ||
|
|
(th_packet_iskeyframe(packet) && frameEndTime >= aTimeThreshold))
|
|
{
|
|
aKeyframeSkip = false;
|
|
nsresult res = DecodeTheora(packet, aTimeThreshold);
|
|
decoded++;
|
|
if (NS_FAILED(res)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (eos) {
|
|
// We've encountered an end of bitstream packet. Inform the queue that
|
|
// there will be no more frames.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool OggReader::ReadOggPage(ogg_page* aPage)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
|
|
int ret = 0;
|
|
while((ret = ogg_sync_pageseek(&mOggState, aPage)) <= 0) {
|
|
if (ret < 0) {
|
|
// Lost page sync, have to skip up to next page.
|
|
continue;
|
|
}
|
|
// Returns a buffer that can be written too
|
|
// with the given size. This buffer is stored
|
|
// in the ogg synchronisation structure.
|
|
char* buffer = ogg_sync_buffer(&mOggState, 4096);
|
|
NS_ASSERTION(buffer, "ogg_sync_buffer failed");
|
|
|
|
// Read from the resource into the buffer
|
|
uint32_t bytesRead = 0;
|
|
|
|
nsresult rv = mDecoder->GetResource()->Read(buffer, 4096, &bytesRead);
|
|
if (NS_FAILED(rv) || (bytesRead == 0 && ret == 0)) {
|
|
// End of file.
|
|
return false;
|
|
}
|
|
|
|
// Update the synchronisation layer with the number
|
|
// of bytes written to the buffer
|
|
ret = ogg_sync_wrote(&mOggState, bytesRead);
|
|
NS_ENSURE_TRUE(ret == 0, false);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
ogg_packet* OggReader::NextOggPacket(OggCodecState* aCodecState)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
|
|
if (!aCodecState || !aCodecState->mActive) {
|
|
return nullptr;
|
|
}
|
|
|
|
ogg_packet* packet;
|
|
while ((packet = aCodecState->PacketOut()) == nullptr) {
|
|
// The codec state does not have any buffered pages, so try to read another
|
|
// page from the channel.
|
|
ogg_page page;
|
|
if (!ReadOggPage(&page)) {
|
|
return nullptr;
|
|
}
|
|
|
|
uint32_t serial = ogg_page_serialno(&page);
|
|
OggCodecState* codecState = nullptr;
|
|
codecState = mCodecStore.Get(serial);
|
|
if (codecState && NS_FAILED(codecState->PageIn(&page))) {
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
return packet;
|
|
}
|
|
|
|
// Returns an ogg page's checksum.
|
|
static ogg_uint32_t
|
|
GetChecksum(ogg_page* page)
|
|
{
|
|
if (page == 0 || page->header == 0 || page->header_len < 25) {
|
|
return 0;
|
|
}
|
|
const unsigned char* p = page->header + 22;
|
|
uint32_t c = p[0] +
|
|
(p[1] << 8) +
|
|
(p[2] << 16) +
|
|
(p[3] << 24);
|
|
return c;
|
|
}
|
|
|
|
int64_t OggReader::RangeStartTime(int64_t aOffset)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
NS_ENSURE_TRUE(resource != nullptr, 0);
|
|
nsresult res = resource->Seek(nsISeekableStream::NS_SEEK_SET, aOffset);
|
|
NS_ENSURE_SUCCESS(res, 0);
|
|
int64_t startTime = 0;
|
|
FindStartTime(startTime);
|
|
return startTime;
|
|
}
|
|
|
|
struct nsAutoOggSyncState {
|
|
nsAutoOggSyncState() {
|
|
ogg_sync_init(&mState);
|
|
}
|
|
~nsAutoOggSyncState() {
|
|
ogg_sync_clear(&mState);
|
|
}
|
|
ogg_sync_state mState;
|
|
};
|
|
|
|
int64_t OggReader::RangeEndTime(int64_t aEndOffset)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnStateMachineThread() || mDecoder->OnDecodeThread(),
|
|
"Should be on state machine or decode thread.");
|
|
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
NS_ENSURE_TRUE(resource != nullptr, -1);
|
|
int64_t position = resource->Tell();
|
|
int64_t endTime = RangeEndTime(0, aEndOffset, false);
|
|
nsresult res = resource->Seek(nsISeekableStream::NS_SEEK_SET, position);
|
|
NS_ENSURE_SUCCESS(res, -1);
|
|
return endTime;
|
|
}
|
|
|
|
int64_t OggReader::RangeEndTime(int64_t aStartOffset,
|
|
int64_t aEndOffset,
|
|
bool aCachedDataOnly)
|
|
{
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
nsAutoOggSyncState sync;
|
|
|
|
// We need to find the last page which ends before aEndOffset that
|
|
// has a granulepos that we can convert to a timestamp. We do this by
|
|
// backing off from aEndOffset until we encounter a page on which we can
|
|
// interpret the granulepos. If while backing off we encounter a page which
|
|
// we've previously encountered before, we'll either backoff again if we
|
|
// haven't found an end time yet, or return the last end time found.
|
|
const int step = 5000;
|
|
const int maxOggPageSize = 65306;
|
|
int64_t readStartOffset = aEndOffset;
|
|
int64_t readLimitOffset = aEndOffset;
|
|
int64_t readHead = aEndOffset;
|
|
int64_t endTime = -1;
|
|
uint32_t checksumAfterSeek = 0;
|
|
uint32_t prevChecksumAfterSeek = 0;
|
|
bool mustBackOff = false;
|
|
while (true) {
|
|
ogg_page page;
|
|
int ret = ogg_sync_pageseek(&sync.mState, &page);
|
|
if (ret == 0) {
|
|
// We need more data if we've not encountered a page we've seen before,
|
|
// or we've read to the end of file.
|
|
if (mustBackOff || readHead == aEndOffset || readHead == aStartOffset) {
|
|
if (endTime != -1 || readStartOffset == 0) {
|
|
// We have encountered a page before, or we're at the end of file.
|
|
break;
|
|
}
|
|
mustBackOff = false;
|
|
prevChecksumAfterSeek = checksumAfterSeek;
|
|
checksumAfterSeek = 0;
|
|
ogg_sync_reset(&sync.mState);
|
|
readStartOffset = std::max(static_cast<int64_t>(0), readStartOffset - step);
|
|
// There's no point reading more than the maximum size of
|
|
// an Ogg page into data we've previously scanned. Any data
|
|
// between readLimitOffset and aEndOffset must be garbage
|
|
// and we can ignore it thereafter.
|
|
readLimitOffset = std::min(readLimitOffset,
|
|
readStartOffset + maxOggPageSize);
|
|
readHead = std::max(aStartOffset, readStartOffset);
|
|
}
|
|
|
|
int64_t limit = std::min(static_cast<int64_t>(UINT32_MAX),
|
|
aEndOffset - readHead);
|
|
limit = std::max(static_cast<int64_t>(0), limit);
|
|
limit = std::min(limit, static_cast<int64_t>(step));
|
|
uint32_t bytesToRead = static_cast<uint32_t>(limit);
|
|
uint32_t bytesRead = 0;
|
|
char* buffer = ogg_sync_buffer(&sync.mState, bytesToRead);
|
|
NS_ASSERTION(buffer, "Must have buffer");
|
|
nsresult res;
|
|
if (aCachedDataOnly) {
|
|
res = resource->ReadFromCache(buffer, readHead, bytesToRead);
|
|
NS_ENSURE_SUCCESS(res, -1);
|
|
bytesRead = bytesToRead;
|
|
} else {
|
|
NS_ASSERTION(readHead < aEndOffset,
|
|
"resource pos must be before range end");
|
|
res = resource->Seek(nsISeekableStream::NS_SEEK_SET, readHead);
|
|
NS_ENSURE_SUCCESS(res, -1);
|
|
res = resource->Read(buffer, bytesToRead, &bytesRead);
|
|
NS_ENSURE_SUCCESS(res, -1);
|
|
}
|
|
readHead += bytesRead;
|
|
if (readHead > readLimitOffset) {
|
|
mustBackOff = true;
|
|
}
|
|
|
|
// Update the synchronisation layer with the number
|
|
// of bytes written to the buffer
|
|
ret = ogg_sync_wrote(&sync.mState, bytesRead);
|
|
if (ret != 0) {
|
|
endTime = -1;
|
|
break;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (ret < 0 || ogg_page_granulepos(&page) < 0) {
|
|
continue;
|
|
}
|
|
|
|
uint32_t checksum = GetChecksum(&page);
|
|
if (checksumAfterSeek == 0) {
|
|
// This is the first page we've decoded after a backoff/seek. Remember
|
|
// the page checksum. If we backoff further and encounter this page
|
|
// again, we'll know that we won't find a page with an end time after
|
|
// this one, so we'll know to back off again.
|
|
checksumAfterSeek = checksum;
|
|
}
|
|
if (checksum == prevChecksumAfterSeek) {
|
|
// This page has the same checksum as the first page we encountered
|
|
// after the last backoff/seek. Since we've already scanned after this
|
|
// page and failed to find an end time, we may as well backoff again and
|
|
// try to find an end time from an earlier page.
|
|
mustBackOff = true;
|
|
continue;
|
|
}
|
|
|
|
int64_t granulepos = ogg_page_granulepos(&page);
|
|
int serial = ogg_page_serialno(&page);
|
|
|
|
OggCodecState* codecState = nullptr;
|
|
codecState = mCodecStore.Get(serial);
|
|
if (!codecState) {
|
|
// This page is from a bitstream which we haven't encountered yet.
|
|
// It's probably from a new "link" in a "chained" ogg. Don't
|
|
// bother even trying to find a duration...
|
|
SetChained(true);
|
|
endTime = -1;
|
|
break;
|
|
}
|
|
|
|
int64_t t = codecState->Time(granulepos);
|
|
if (t != -1) {
|
|
endTime = t;
|
|
}
|
|
}
|
|
|
|
return endTime;
|
|
}
|
|
|
|
nsresult OggReader::GetSeekRanges(nsTArray<SeekRange>& aRanges)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
nsTArray<MediaByteRange> cached;
|
|
nsresult res = mDecoder->GetResource()->GetCachedRanges(cached);
|
|
NS_ENSURE_SUCCESS(res, res);
|
|
|
|
for (uint32_t index = 0; index < cached.Length(); index++) {
|
|
MediaByteRange& range = cached[index];
|
|
int64_t startTime = -1;
|
|
int64_t endTime = -1;
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
int64_t startOffset = range.mStart;
|
|
int64_t endOffset = range.mEnd;
|
|
startTime = RangeStartTime(startOffset);
|
|
if (startTime != -1 &&
|
|
((endTime = RangeEndTime(endOffset)) != -1))
|
|
{
|
|
NS_WARN_IF_FALSE(startTime < endTime,
|
|
"Start time must be before end time");
|
|
aRanges.AppendElement(SeekRange(startOffset,
|
|
endOffset,
|
|
startTime,
|
|
endTime));
|
|
}
|
|
}
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
OggReader::SeekRange
|
|
OggReader::SelectSeekRange(const nsTArray<SeekRange>& ranges,
|
|
int64_t aTarget,
|
|
int64_t aStartTime,
|
|
int64_t aEndTime,
|
|
bool aExact)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
int64_t so = 0;
|
|
int64_t eo = mDecoder->GetResource()->GetLength();
|
|
int64_t st = aStartTime;
|
|
int64_t et = aEndTime;
|
|
for (uint32_t i = 0; i < ranges.Length(); i++) {
|
|
const SeekRange &r = ranges[i];
|
|
if (r.mTimeStart < aTarget) {
|
|
so = r.mOffsetStart;
|
|
st = r.mTimeStart;
|
|
}
|
|
if (r.mTimeEnd >= aTarget && r.mTimeEnd < et) {
|
|
eo = r.mOffsetEnd;
|
|
et = r.mTimeEnd;
|
|
}
|
|
|
|
if (r.mTimeStart < aTarget && aTarget <= r.mTimeEnd) {
|
|
// Target lies exactly in this range.
|
|
return ranges[i];
|
|
}
|
|
}
|
|
if (aExact || eo == -1) {
|
|
return SeekRange();
|
|
}
|
|
return SeekRange(so, eo, st, et);
|
|
}
|
|
|
|
OggReader::IndexedSeekResult OggReader::RollbackIndexedSeek(int64_t aOffset)
|
|
{
|
|
if (mSkeletonState) {
|
|
mSkeletonState->Deactivate();
|
|
}
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
NS_ENSURE_TRUE(resource != nullptr, SEEK_FATAL_ERROR);
|
|
nsresult res = resource->Seek(nsISeekableStream::NS_SEEK_SET, aOffset);
|
|
NS_ENSURE_SUCCESS(res, SEEK_FATAL_ERROR);
|
|
return SEEK_INDEX_FAIL;
|
|
}
|
|
|
|
OggReader::IndexedSeekResult OggReader::SeekToKeyframeUsingIndex(int64_t aTarget)
|
|
{
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
NS_ENSURE_TRUE(resource != nullptr, SEEK_FATAL_ERROR);
|
|
if (!HasSkeleton() || !mSkeletonState->HasIndex()) {
|
|
return SEEK_INDEX_FAIL;
|
|
}
|
|
// We have an index from the Skeleton track, try to use it to seek.
|
|
nsAutoTArray<uint32_t, 2> tracks;
|
|
BuildSerialList(tracks);
|
|
SkeletonState::nsSeekTarget keyframe;
|
|
if (NS_FAILED(mSkeletonState->IndexedSeekTarget(aTarget,
|
|
tracks,
|
|
keyframe)))
|
|
{
|
|
// Could not locate a keypoint for the target in the index.
|
|
return SEEK_INDEX_FAIL;
|
|
}
|
|
|
|
// Remember original resource read cursor position so we can rollback on failure.
|
|
int64_t tell = resource->Tell();
|
|
|
|
// Seek to the keypoint returned by the index.
|
|
if (keyframe.mKeyPoint.mOffset > resource->GetLength() ||
|
|
keyframe.mKeyPoint.mOffset < 0)
|
|
{
|
|
// Index must be invalid.
|
|
return RollbackIndexedSeek(tell);
|
|
}
|
|
LOG(PR_LOG_DEBUG, ("Seeking using index to keyframe at offset %lld\n",
|
|
keyframe.mKeyPoint.mOffset));
|
|
nsresult res = resource->Seek(nsISeekableStream::NS_SEEK_SET,
|
|
keyframe.mKeyPoint.mOffset);
|
|
NS_ENSURE_SUCCESS(res, SEEK_FATAL_ERROR);
|
|
|
|
// We've moved the read set, so reset decode.
|
|
res = ResetDecode();
|
|
NS_ENSURE_SUCCESS(res, SEEK_FATAL_ERROR);
|
|
|
|
// Check that the page the index thinks is exactly here is actually exactly
|
|
// here. If not, the index is invalid.
|
|
ogg_page page;
|
|
int skippedBytes = 0;
|
|
PageSyncResult syncres = PageSync(resource,
|
|
&mOggState,
|
|
false,
|
|
keyframe.mKeyPoint.mOffset,
|
|
resource->GetLength(),
|
|
&page,
|
|
skippedBytes);
|
|
NS_ENSURE_TRUE(syncres != PAGE_SYNC_ERROR, SEEK_FATAL_ERROR);
|
|
if (syncres != PAGE_SYNC_OK || skippedBytes != 0) {
|
|
LOG(PR_LOG_DEBUG, ("Indexed-seek failure: Ogg Skeleton Index is invalid "
|
|
"or sync error after seek"));
|
|
return RollbackIndexedSeek(tell);
|
|
}
|
|
uint32_t serial = ogg_page_serialno(&page);
|
|
if (serial != keyframe.mSerial) {
|
|
// Serialno of page at offset isn't what the index told us to expect.
|
|
// Assume the index is invalid.
|
|
return RollbackIndexedSeek(tell);
|
|
}
|
|
OggCodecState* codecState = mCodecStore.Get(serial);
|
|
if (codecState &&
|
|
codecState->mActive &&
|
|
ogg_stream_pagein(&codecState->mState, &page) != 0)
|
|
{
|
|
// Couldn't insert page into the ogg resource, or somehow the resource
|
|
// is no longer active.
|
|
return RollbackIndexedSeek(tell);
|
|
}
|
|
return SEEK_OK;
|
|
}
|
|
|
|
nsresult OggReader::SeekInBufferedRange(int64_t aTarget,
|
|
int64_t aAdjustedTarget,
|
|
int64_t aStartTime,
|
|
int64_t aEndTime,
|
|
const nsTArray<SeekRange>& aRanges,
|
|
const SeekRange& aRange)
|
|
{
|
|
LOG(PR_LOG_DEBUG, ("%p Seeking in buffered data to %lld using bisection search", mDecoder, aTarget));
|
|
nsresult res = NS_OK;
|
|
if (HasVideo() || aAdjustedTarget >= aTarget) {
|
|
// We know the exact byte range in which the target must lie. It must
|
|
// be buffered in the media cache. Seek there.
|
|
nsresult res = SeekBisection(aTarget, aRange, 0);
|
|
if (NS_FAILED(res) || !HasVideo()) {
|
|
return res;
|
|
}
|
|
|
|
// We have an active Theora bitstream. Decode the next Theora frame, and
|
|
// extract its keyframe's time.
|
|
bool eof;
|
|
do {
|
|
bool skip = false;
|
|
eof = !DecodeVideoFrame(skip, 0);
|
|
{
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
if (mDecoder->IsShutdown()) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
}
|
|
} while (!eof &&
|
|
mVideoQueue.GetSize() == 0);
|
|
|
|
VideoData* video = mVideoQueue.PeekFront();
|
|
if (video && !video->mKeyframe) {
|
|
// First decoded frame isn't a keyframe, seek back to previous keyframe,
|
|
// otherwise we'll get visual artifacts.
|
|
NS_ASSERTION(video->mTimecode != -1, "Must have a granulepos");
|
|
int shift = mTheoraState->mInfo.keyframe_granule_shift;
|
|
int64_t keyframeGranulepos = (video->mTimecode >> shift) << shift;
|
|
int64_t keyframeTime = mTheoraState->StartTime(keyframeGranulepos);
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Keyframe for %lld is at %lld, seeking back to it",
|
|
video->mTime, keyframeTime));
|
|
aAdjustedTarget = std::min(aAdjustedTarget, keyframeTime);
|
|
}
|
|
}
|
|
if (aAdjustedTarget < aTarget) {
|
|
SeekRange k = SelectSeekRange(aRanges,
|
|
aAdjustedTarget,
|
|
aStartTime,
|
|
aEndTime,
|
|
false);
|
|
res = SeekBisection(aAdjustedTarget, k, SEEK_FUZZ_USECS);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
nsresult OggReader::SeekInUnbuffered(int64_t aTarget,
|
|
int64_t aStartTime,
|
|
int64_t aEndTime,
|
|
const nsTArray<SeekRange>& aRanges)
|
|
{
|
|
LOG(PR_LOG_DEBUG, ("%p Seeking in unbuffered data to %lld using bisection search", mDecoder, aTarget));
|
|
|
|
// If we've got an active Theora bitstream, determine the maximum possible
|
|
// time in usecs which a keyframe could be before a given interframe. We
|
|
// subtract this from our seek target, seek to the new target, and then
|
|
// will decode forward to the original seek target. We should encounter a
|
|
// keyframe in that interval. This prevents us from needing to run two
|
|
// bisections; one for the seek target frame, and another to find its
|
|
// keyframe. It's usually faster to just download this extra data, rather
|
|
// tham perform two bisections to find the seek target's keyframe. We
|
|
// don't do this offsetting when seeking in a buffered range,
|
|
// as the extra decoding causes a noticeable speed hit when all the data
|
|
// is buffered (compared to just doing a bisection to exactly find the
|
|
// keyframe).
|
|
int64_t keyframeOffsetMs = 0;
|
|
if (HasVideo() && mTheoraState) {
|
|
keyframeOffsetMs = mTheoraState->MaxKeyframeOffset();
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
// Add in the Opus pre-roll if necessary, as well.
|
|
if (HasAudio() && mOpusState) {
|
|
keyframeOffsetMs = std::max(keyframeOffsetMs, SEEK_OPUS_PREROLL);
|
|
}
|
|
#endif /* MOZ_OPUS */
|
|
int64_t seekTarget = std::max(aStartTime, aTarget - keyframeOffsetMs);
|
|
// Minimize the bisection search space using the known timestamps from the
|
|
// buffered ranges.
|
|
SeekRange k = SelectSeekRange(aRanges, seekTarget, aStartTime, aEndTime, false);
|
|
return SeekBisection(seekTarget, k, SEEK_FUZZ_USECS);
|
|
}
|
|
|
|
nsresult OggReader::Seek(int64_t aTarget,
|
|
int64_t aStartTime,
|
|
int64_t aEndTime,
|
|
int64_t aCurrentTime)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
if (mIsChained)
|
|
return NS_ERROR_FAILURE;
|
|
LOG(PR_LOG_DEBUG, ("%p About to seek to %lld", mDecoder, aTarget));
|
|
nsresult res;
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
NS_ENSURE_TRUE(resource != nullptr, NS_ERROR_FAILURE);
|
|
int64_t adjustedTarget = aTarget;
|
|
#ifdef MOZ_OPUS
|
|
if (HasAudio() && mOpusState){
|
|
adjustedTarget = std::max(aStartTime, aTarget - SEEK_OPUS_PREROLL);
|
|
}
|
|
#endif /* MOZ_OPUS */
|
|
|
|
if (adjustedTarget == aStartTime) {
|
|
// We've seeked to the media start. Just seek to the offset of the first
|
|
// content page.
|
|
res = resource->Seek(nsISeekableStream::NS_SEEK_SET, 0);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
|
|
res = ResetDecode(true);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
|
|
NS_ASSERTION(aStartTime != -1, "mStartTime should be known");
|
|
{
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
mDecoder->UpdatePlaybackPosition(aStartTime);
|
|
}
|
|
} else {
|
|
// TODO: This may seek back unnecessarily far in the video, but we don't
|
|
// have a way of asking Skeleton to seek to a different target for each
|
|
// stream yet. Using adjustedTarget here is at least correct, if slow.
|
|
IndexedSeekResult sres = SeekToKeyframeUsingIndex(adjustedTarget);
|
|
NS_ENSURE_TRUE(sres != SEEK_FATAL_ERROR, NS_ERROR_FAILURE);
|
|
if (sres == SEEK_INDEX_FAIL) {
|
|
// No index or other non-fatal index-related failure. Try to seek
|
|
// using a bisection search. Determine the already downloaded data
|
|
// in the media cache, so we can try to seek in the cached data first.
|
|
nsAutoTArray<SeekRange, 16> ranges;
|
|
res = GetSeekRanges(ranges);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
|
|
// Figure out if the seek target lies in a buffered range.
|
|
SeekRange r = SelectSeekRange(ranges, aTarget, aStartTime, aEndTime, true);
|
|
|
|
if (!r.IsNull()) {
|
|
// We know the buffered range in which the seek target lies, do a
|
|
// bisection search in that buffered range.
|
|
res = SeekInBufferedRange(aTarget, adjustedTarget, aStartTime, aEndTime, ranges, r);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
} else {
|
|
// The target doesn't lie in a buffered range. Perform a bisection
|
|
// search over the whole media, using the known buffered ranges to
|
|
// reduce the search space.
|
|
res = SeekInUnbuffered(aTarget, aStartTime, aEndTime, ranges);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (HasVideo()) {
|
|
// Decode forwards until we find the next keyframe. This is required,
|
|
// as although the seek should finish on a page containing a keyframe,
|
|
// there may be non-keyframes in the page before the keyframe.
|
|
// When doing fastSeek we display the first frame after the seek, so
|
|
// we need to advance the decode to the keyframe otherwise we'll get
|
|
// visual artifacts in the first frame output after the seek.
|
|
// First, we must check to see if there's already a keyframe in the frames
|
|
// that we may have already decoded, and discard frames up to the
|
|
// keyframe.
|
|
VideoData* v;
|
|
while ((v = mVideoQueue.PeekFront()) && !v->mKeyframe) {
|
|
delete mVideoQueue.PopFront();
|
|
}
|
|
if (mVideoQueue.GetSize() == 0) {
|
|
// We didn't find a keyframe in the frames already here, so decode
|
|
// forwards until we find a keyframe.
|
|
bool skip = true;
|
|
while (DecodeVideoFrame(skip, 0) && skip) {
|
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
|
if (mDecoder->IsShutdown()) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
}
|
|
}
|
|
#ifdef DEBUG
|
|
v = mVideoQueue.PeekFront();
|
|
if (!v || !v->mKeyframe) {
|
|
NS_WARNING("Ogg seek didn't end up before a key frame!");
|
|
}
|
|
#endif
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
// Reads a page from the media resource.
|
|
static PageSyncResult
|
|
PageSync(MediaResource* aResource,
|
|
ogg_sync_state* aState,
|
|
bool aCachedDataOnly,
|
|
int64_t aOffset,
|
|
int64_t aEndOffset,
|
|
ogg_page* aPage,
|
|
int& aSkippedBytes)
|
|
{
|
|
aSkippedBytes = 0;
|
|
// Sync to the next page.
|
|
int ret = 0;
|
|
uint32_t bytesRead = 0;
|
|
int64_t readHead = aOffset;
|
|
while (ret <= 0) {
|
|
ret = ogg_sync_pageseek(aState, aPage);
|
|
if (ret == 0) {
|
|
char* buffer = ogg_sync_buffer(aState, PAGE_STEP);
|
|
NS_ASSERTION(buffer, "Must have a buffer");
|
|
|
|
// Read from the file into the buffer
|
|
int64_t bytesToRead = std::min(static_cast<int64_t>(PAGE_STEP),
|
|
aEndOffset - readHead);
|
|
NS_ASSERTION(bytesToRead <= UINT32_MAX, "bytesToRead range check");
|
|
if (bytesToRead <= 0) {
|
|
return PAGE_SYNC_END_OF_RANGE;
|
|
}
|
|
nsresult rv = NS_OK;
|
|
if (aCachedDataOnly) {
|
|
rv = aResource->ReadFromCache(buffer, readHead,
|
|
static_cast<uint32_t>(bytesToRead));
|
|
NS_ENSURE_SUCCESS(rv,PAGE_SYNC_ERROR);
|
|
bytesRead = static_cast<uint32_t>(bytesToRead);
|
|
} else {
|
|
rv = aResource->Seek(nsISeekableStream::NS_SEEK_SET, readHead);
|
|
NS_ENSURE_SUCCESS(rv,PAGE_SYNC_ERROR);
|
|
rv = aResource->Read(buffer,
|
|
static_cast<uint32_t>(bytesToRead),
|
|
&bytesRead);
|
|
NS_ENSURE_SUCCESS(rv,PAGE_SYNC_ERROR);
|
|
}
|
|
if (bytesRead == 0 && NS_SUCCEEDED(rv)) {
|
|
// End of file.
|
|
return PAGE_SYNC_END_OF_RANGE;
|
|
}
|
|
readHead += bytesRead;
|
|
|
|
// Update the synchronisation layer with the number
|
|
// of bytes written to the buffer
|
|
ret = ogg_sync_wrote(aState, bytesRead);
|
|
NS_ENSURE_TRUE(ret == 0, PAGE_SYNC_ERROR);
|
|
continue;
|
|
}
|
|
|
|
if (ret < 0) {
|
|
NS_ASSERTION(aSkippedBytes >= 0, "Offset >= 0");
|
|
aSkippedBytes += -ret;
|
|
NS_ASSERTION(aSkippedBytes >= 0, "Offset >= 0");
|
|
continue;
|
|
}
|
|
}
|
|
|
|
return PAGE_SYNC_OK;
|
|
}
|
|
|
|
nsresult OggReader::SeekBisection(int64_t aTarget,
|
|
const SeekRange& aRange,
|
|
uint32_t aFuzz)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
|
|
nsresult res;
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
|
|
if (aTarget == aRange.mTimeStart) {
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
res = resource->Seek(nsISeekableStream::NS_SEEK_SET, 0);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
return NS_OK;
|
|
}
|
|
|
|
// Bisection search, find start offset of last page with end time less than
|
|
// the seek target.
|
|
ogg_int64_t startOffset = aRange.mOffsetStart;
|
|
ogg_int64_t startTime = aRange.mTimeStart;
|
|
ogg_int64_t startLength = 0; // Length of the page at startOffset.
|
|
ogg_int64_t endOffset = aRange.mOffsetEnd;
|
|
ogg_int64_t endTime = aRange.mTimeEnd;
|
|
|
|
ogg_int64_t seekTarget = aTarget;
|
|
int64_t seekLowerBound = std::max(static_cast<int64_t>(0), aTarget - aFuzz);
|
|
int hops = 0;
|
|
DebugOnly<ogg_int64_t> previousGuess = -1;
|
|
int backsteps = 0;
|
|
const int maxBackStep = 10;
|
|
NS_ASSERTION(static_cast<uint64_t>(PAGE_STEP) * pow(2.0, maxBackStep) < INT32_MAX,
|
|
"Backstep calculation must not overflow");
|
|
|
|
// Seek via bisection search. Loop until we find the offset where the page
|
|
// before the offset is before the seek target, and the page after the offset
|
|
// is after the seek target.
|
|
while (true) {
|
|
ogg_int64_t duration = 0;
|
|
double target = 0;
|
|
ogg_int64_t interval = 0;
|
|
ogg_int64_t guess = 0;
|
|
ogg_page page;
|
|
int skippedBytes = 0;
|
|
ogg_int64_t pageOffset = 0;
|
|
ogg_int64_t pageLength = 0;
|
|
ogg_int64_t granuleTime = -1;
|
|
bool mustBackoff = false;
|
|
|
|
// Guess where we should bisect to, based on the bit rate and the time
|
|
// remaining in the interval. Loop until we can determine the time at
|
|
// the guess offset.
|
|
while (true) {
|
|
|
|
// Discard any previously buffered packets/pages.
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
interval = endOffset - startOffset - startLength;
|
|
if (interval == 0) {
|
|
// Our interval is empty, we've found the optimal seek point, as the
|
|
// page at the start offset is before the seek target, and the page
|
|
// at the end offset is after the seek target.
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Interval narrowed, terminating bisection."));
|
|
break;
|
|
}
|
|
|
|
// Guess bisection point.
|
|
duration = endTime - startTime;
|
|
target = (double)(seekTarget - startTime) / (double)duration;
|
|
guess = startOffset + startLength +
|
|
static_cast<ogg_int64_t>((double)interval * target);
|
|
guess = std::min(guess, endOffset - PAGE_STEP);
|
|
if (mustBackoff) {
|
|
// We previously failed to determine the time at the guess offset,
|
|
// probably because we ran out of data to decode. This usually happens
|
|
// when we guess very close to the end offset. So reduce the guess
|
|
// offset using an exponential backoff until we determine the time.
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Backing off %d bytes, backsteps=%d",
|
|
static_cast<int32_t>(PAGE_STEP * pow(2.0, backsteps)), backsteps));
|
|
guess -= PAGE_STEP * static_cast<ogg_int64_t>(pow(2.0, backsteps));
|
|
|
|
if (guess <= startOffset) {
|
|
// We've tried to backoff to before the start offset of our seek
|
|
// range. This means we couldn't find a seek termination position
|
|
// near the end of the seek range, so just set the seek termination
|
|
// condition, and break out of the bisection loop. We'll begin
|
|
// decoding from the start of the seek range.
|
|
interval = 0;
|
|
break;
|
|
}
|
|
|
|
backsteps = std::min(backsteps + 1, maxBackStep);
|
|
// We reset mustBackoff. If we still need to backoff further, it will
|
|
// be set to true again.
|
|
mustBackoff = false;
|
|
} else {
|
|
backsteps = 0;
|
|
}
|
|
guess = std::max(guess, startOffset + startLength);
|
|
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Seek loop start[o=%lld..%lld t=%lld] "
|
|
"end[o=%lld t=%lld] "
|
|
"interval=%lld target=%lf guess=%lld",
|
|
startOffset, (startOffset+startLength), startTime,
|
|
endOffset, endTime, interval, target, guess));
|
|
|
|
NS_ASSERTION(guess >= startOffset + startLength, "Guess must be after range start");
|
|
NS_ASSERTION(guess < endOffset, "Guess must be before range end");
|
|
NS_ASSERTION(guess != previousGuess, "Guess should be different to previous");
|
|
previousGuess = guess;
|
|
|
|
hops++;
|
|
|
|
// Locate the next page after our seek guess, and then figure out the
|
|
// granule time of the audio and video bitstreams there. We can then
|
|
// make a bisection decision based on our location in the media.
|
|
PageSyncResult res = PageSync(resource,
|
|
&mOggState,
|
|
false,
|
|
guess,
|
|
endOffset,
|
|
&page,
|
|
skippedBytes);
|
|
NS_ENSURE_TRUE(res != PAGE_SYNC_ERROR, NS_ERROR_FAILURE);
|
|
|
|
if (res == PAGE_SYNC_END_OF_RANGE) {
|
|
// Our guess was too close to the end, we've ended up reading the end
|
|
// page. Backoff exponentially from the end point, in case the last
|
|
// page/frame/sample is huge.
|
|
mustBackoff = true;
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Hit the end of range, backing off"));
|
|
continue;
|
|
}
|
|
|
|
// We've located a page of length |ret| at |guess + skippedBytes|.
|
|
// Remember where the page is located.
|
|
pageOffset = guess + skippedBytes;
|
|
pageLength = page.header_len + page.body_len;
|
|
|
|
// Read pages until we can determine the granule time of the audio and
|
|
// video bitstream.
|
|
ogg_int64_t audioTime = -1;
|
|
ogg_int64_t videoTime = -1;
|
|
do {
|
|
// Add the page to its codec state, determine its granule time.
|
|
uint32_t serial = ogg_page_serialno(&page);
|
|
OggCodecState* codecState = mCodecStore.Get(serial);
|
|
if (codecState && codecState->mActive) {
|
|
int ret = ogg_stream_pagein(&codecState->mState, &page);
|
|
NS_ENSURE_TRUE(ret == 0, NS_ERROR_FAILURE);
|
|
}
|
|
|
|
ogg_int64_t granulepos = ogg_page_granulepos(&page);
|
|
|
|
if (HasAudio() && granulepos > 0 && audioTime == -1) {
|
|
if (mVorbisState && serial == mVorbisState->mSerial) {
|
|
audioTime = mVorbisState->Time(granulepos);
|
|
#ifdef MOZ_OPUS
|
|
} else if (mOpusState && serial == mOpusState->mSerial) {
|
|
audioTime = mOpusState->Time(granulepos);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (HasVideo() &&
|
|
granulepos > 0 &&
|
|
serial == mTheoraState->mSerial &&
|
|
videoTime == -1) {
|
|
videoTime = mTheoraState->Time(granulepos);
|
|
}
|
|
|
|
if (pageOffset + pageLength >= endOffset) {
|
|
// Hit end of readable data.
|
|
break;
|
|
}
|
|
|
|
if (!ReadOggPage(&page)) {
|
|
break;
|
|
}
|
|
|
|
} while ((HasAudio() && audioTime == -1) ||
|
|
(HasVideo() && videoTime == -1));
|
|
|
|
|
|
if ((HasAudio() && audioTime == -1) ||
|
|
(HasVideo() && videoTime == -1))
|
|
{
|
|
// We don't have timestamps for all active tracks...
|
|
if (pageOffset == startOffset + startLength &&
|
|
pageOffset + pageLength >= endOffset) {
|
|
// We read the entire interval without finding timestamps for all
|
|
// active tracks. We know the interval start offset is before the seek
|
|
// target, and the interval end is after the seek target, and we can't
|
|
// terminate inside the interval, so we terminate the seek at the
|
|
// start of the interval.
|
|
interval = 0;
|
|
break;
|
|
}
|
|
|
|
// We should backoff; cause the guess to back off from the end, so
|
|
// that we've got more room to capture.
|
|
mustBackoff = true;
|
|
continue;
|
|
}
|
|
|
|
// We've found appropriate time stamps here. Proceed to bisect
|
|
// the search space.
|
|
granuleTime = std::max(audioTime, videoTime);
|
|
NS_ASSERTION(granuleTime > 0, "Must get a granuletime");
|
|
break;
|
|
} // End of "until we determine time at guess offset" loop.
|
|
|
|
if (interval == 0) {
|
|
// Seek termination condition; we've found the page boundary of the
|
|
// last page before the target, and the first page after the target.
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Terminating seek at offset=%lld", startOffset));
|
|
NS_ASSERTION(startTime < aTarget, "Start time must always be less than target");
|
|
res = resource->Seek(nsISeekableStream::NS_SEEK_SET, startOffset);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Time at offset %lld is %lld", guess, granuleTime));
|
|
if (granuleTime < seekTarget && granuleTime > seekLowerBound) {
|
|
// We're within the fuzzy region in which we want to terminate the search.
|
|
res = resource->Seek(nsISeekableStream::NS_SEEK_SET, pageOffset);
|
|
NS_ENSURE_SUCCESS(res,res);
|
|
if (NS_FAILED(ResetDecode())) {
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Terminating seek at offset=%lld", pageOffset));
|
|
break;
|
|
}
|
|
|
|
if (granuleTime >= seekTarget) {
|
|
// We've landed after the seek target.
|
|
NS_ASSERTION(pageOffset < endOffset, "offset_end must decrease");
|
|
endOffset = pageOffset;
|
|
endTime = granuleTime;
|
|
} else if (granuleTime < seekTarget) {
|
|
// Landed before seek target.
|
|
NS_ASSERTION(pageOffset >= startOffset + startLength,
|
|
"Bisection point should be at or after end of first page in interval");
|
|
startOffset = pageOffset;
|
|
startLength = pageLength;
|
|
startTime = granuleTime;
|
|
}
|
|
NS_ASSERTION(startTime < seekTarget, "Must be before seek target");
|
|
NS_ASSERTION(endTime >= seekTarget, "End must be after seek target");
|
|
}
|
|
|
|
SEEK_LOG(PR_LOG_DEBUG, ("Seek complete in %d bisections.", hops));
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult OggReader::GetBuffered(dom::TimeRanges* aBuffered, int64_t aStartTime)
|
|
{
|
|
{
|
|
mozilla::ReentrantMonitorAutoEnter mon(mMonitor);
|
|
if (mIsChained)
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
#ifdef OGG_ESTIMATE_BUFFERED
|
|
return MediaDecoderReader::GetBuffered(aBuffered, aStartTime);
|
|
#else
|
|
// HasAudio and HasVideo are not used here as they take a lock and cause
|
|
// a deadlock. Accessing mInfo doesn't require a lock - it doesn't change
|
|
// after metadata is read.
|
|
if (!mInfo.HasValidMedia()) {
|
|
// No need to search through the file if there are no audio or video tracks
|
|
return NS_OK;
|
|
}
|
|
|
|
MediaResource* resource = mDecoder->GetResource();
|
|
nsTArray<MediaByteRange> ranges;
|
|
nsresult res = resource->GetCachedRanges(ranges);
|
|
NS_ENSURE_SUCCESS(res, res);
|
|
|
|
// Traverse across the buffered byte ranges, determining the time ranges
|
|
// they contain. MediaResource::GetNextCachedData(offset) returns -1 when
|
|
// offset is after the end of the media resource, or there's no more cached
|
|
// data after the offset. This loop will run until we've checked every
|
|
// buffered range in the media, in increasing order of offset.
|
|
nsAutoOggSyncState sync;
|
|
for (uint32_t index = 0; index < ranges.Length(); index++) {
|
|
// Ensure the offsets are after the header pages.
|
|
int64_t startOffset = ranges[index].mStart;
|
|
int64_t endOffset = ranges[index].mEnd;
|
|
|
|
// Because the granulepos time is actually the end time of the page,
|
|
// we special-case (startOffset == 0) so that the first
|
|
// buffered range always appears to be buffered from the media start
|
|
// time, rather than from the end-time of the first page.
|
|
int64_t startTime = (startOffset == 0) ? aStartTime : -1;
|
|
|
|
// Find the start time of the range. Read pages until we find one with a
|
|
// granulepos which we can convert into a timestamp to use as the time of
|
|
// the start of the buffered range.
|
|
ogg_sync_reset(&sync.mState);
|
|
while (startTime == -1) {
|
|
ogg_page page;
|
|
int32_t discard;
|
|
PageSyncResult res = PageSync(resource,
|
|
&sync.mState,
|
|
true,
|
|
startOffset,
|
|
endOffset,
|
|
&page,
|
|
discard);
|
|
if (res == PAGE_SYNC_ERROR) {
|
|
return NS_ERROR_FAILURE;
|
|
} else if (res == PAGE_SYNC_END_OF_RANGE) {
|
|
// Hit the end of range without reading a page, give up trying to
|
|
// find a start time for this buffered range, skip onto the next one.
|
|
break;
|
|
}
|
|
|
|
int64_t granulepos = ogg_page_granulepos(&page);
|
|
if (granulepos == -1) {
|
|
// Page doesn't have an end time, advance to the next page
|
|
// until we find one.
|
|
startOffset += page.header_len + page.body_len;
|
|
continue;
|
|
}
|
|
|
|
uint32_t serial = ogg_page_serialno(&page);
|
|
if (mVorbisState && serial == mVorbisSerial) {
|
|
startTime = VorbisState::Time(&mVorbisInfo, granulepos);
|
|
NS_ASSERTION(startTime > 0, "Must have positive start time");
|
|
}
|
|
#ifdef MOZ_OPUS
|
|
else if (mOpusState && serial == mOpusSerial) {
|
|
startTime = OpusState::Time(mOpusPreSkip, granulepos);
|
|
NS_ASSERTION(startTime > 0, "Must have positive start time");
|
|
}
|
|
#endif /* MOZ_OPUS */
|
|
else if (mTheoraState && serial == mTheoraSerial) {
|
|
startTime = TheoraState::Time(&mTheoraInfo, granulepos);
|
|
NS_ASSERTION(startTime > 0, "Must have positive start time");
|
|
}
|
|
else if (mCodecStore.Contains(serial)) {
|
|
// Stream is not the theora or vorbis stream we're playing,
|
|
// but is one that we have header data for.
|
|
startOffset += page.header_len + page.body_len;
|
|
continue;
|
|
}
|
|
else {
|
|
// Page is for a stream we don't know about (possibly a chained
|
|
// ogg), return OK to abort the finding any further ranges. This
|
|
// prevents us searching through the rest of the media when we
|
|
// may not be able to extract timestamps from it.
|
|
SetChained(true);
|
|
return NS_OK;
|
|
}
|
|
}
|
|
|
|
if (startTime != -1) {
|
|
// We were able to find a start time for that range, see if we can
|
|
// find an end time.
|
|
int64_t endTime = RangeEndTime(startOffset, endOffset, true);
|
|
if (endTime != -1) {
|
|
aBuffered->Add((startTime - aStartTime) / static_cast<double>(USECS_PER_S),
|
|
(endTime - aStartTime) / static_cast<double>(USECS_PER_S));
|
|
}
|
|
}
|
|
}
|
|
|
|
return NS_OK;
|
|
#endif
|
|
}
|
|
|
|
VideoData* OggReader::FindStartTime(int64_t& aOutStartTime)
|
|
{
|
|
NS_ASSERTION(mDecoder->OnStateMachineThread() || mDecoder->OnDecodeThread(),
|
|
"Should be on state machine or decode thread.");
|
|
|
|
// Extract the start times of the bitstreams in order to calculate
|
|
// the duration.
|
|
int64_t videoStartTime = INT64_MAX;
|
|
int64_t audioStartTime = INT64_MAX;
|
|
VideoData* videoData = nullptr;
|
|
|
|
if (HasVideo()) {
|
|
videoData = DecodeToFirstVideoData();
|
|
if (videoData) {
|
|
videoStartTime = videoData->mTime;
|
|
LOG(PR_LOG_DEBUG, ("OggReader::FindStartTime() video=%lld", videoStartTime));
|
|
}
|
|
}
|
|
if (HasAudio()) {
|
|
AudioData* audioData = DecodeToFirstAudioData();
|
|
if (audioData) {
|
|
audioStartTime = audioData->mTime;
|
|
LOG(PR_LOG_DEBUG, ("OggReader::FindStartTime() audio=%lld", audioStartTime));
|
|
}
|
|
}
|
|
|
|
int64_t startTime = std::min(videoStartTime, audioStartTime);
|
|
if (startTime != INT64_MAX) {
|
|
aOutStartTime = startTime;
|
|
}
|
|
|
|
return videoData;
|
|
}
|
|
|
|
AudioData* OggReader::DecodeToFirstAudioData()
|
|
{
|
|
bool eof = false;
|
|
while (!eof && AudioQueue().GetSize() == 0) {
|
|
{
|
|
ReentrantMonitorAutoEnter decoderMon(mDecoder->GetReentrantMonitor());
|
|
if (mDecoder->IsShutdown()) {
|
|
return nullptr;
|
|
}
|
|
}
|
|
eof = !DecodeAudioData();
|
|
}
|
|
if (eof) {
|
|
AudioQueue().Finish();
|
|
}
|
|
AudioData* d = nullptr;
|
|
return (d = AudioQueue().PeekFront()) ? d : nullptr;
|
|
}
|
|
|
|
OggCodecStore::OggCodecStore()
|
|
: mMonitor("CodecStore")
|
|
{
|
|
}
|
|
|
|
void OggCodecStore::Add(uint32_t serial, OggCodecState* codecState)
|
|
{
|
|
MonitorAutoLock mon(mMonitor);
|
|
mCodecStates.Put(serial, codecState);
|
|
}
|
|
|
|
bool OggCodecStore::Contains(uint32_t serial)
|
|
{
|
|
MonitorAutoLock mon(mMonitor);
|
|
return mCodecStates.Get(serial, nullptr);
|
|
}
|
|
|
|
OggCodecState* OggCodecStore::Get(uint32_t serial)
|
|
{
|
|
MonitorAutoLock mon(mMonitor);
|
|
return mCodecStates.Get(serial);
|
|
}
|
|
|
|
} // namespace mozilla
|
|
|