gecko-dev/media/gmp-clearkey/0.1/WMFH264Decoder.h
Chris Pearce f96fedca29 Bug 1351954 - Change ClearKey CDM to allocate its video frame buffers optimally. r=gerald
The WMF decoder gives us video frames in buffers with the planes 16 row-aligned
for some reason. If we allocate our video frames the same size we waste memory.
So let's have the ClearKey CDM not allocate its video frames with the extra
padding rows.

Excluding the padding in our copy of the decoded data also makes my work in bug
1351953 easier.

MozReview-Commit-ID: 9dD40P6ST68

--HG--
extra : rebase_source : a6c4fea01e8bf2deef8edc78d0a041e8fed0c0b8
extra : source : 433028f9a2055869cd98710f0871d040605c0535
2017-03-28 18:00:01 +13:00

76 lines
1.8 KiB
C++

/*
* Copyright 2013, Mozilla Foundation and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#if !defined(WMFH264Decoder_h_)
#define WMFH264Decoder_h_
#include "WMFUtils.h"
namespace wmf {
class WMFH264Decoder {
public:
WMFH264Decoder();
~WMFH264Decoder();
HRESULT Init(int32_t aCoreCount);
HRESULT Input(const uint8_t* aData,
uint32_t aDataSize,
Microseconds aTimestamp);
HRESULT Output(IMFSample** aOutput);
HRESULT Reset();
int32_t GetFrameHeight() const;
const IntRect& GetPictureRegion() const;
int32_t GetStride() const;
HRESULT Drain();
private:
HRESULT SetDecoderInputType();
HRESULT SetDecoderOutputType();
HRESULT SendMFTMessage(MFT_MESSAGE_TYPE aMsg, UINT32 aData);
HRESULT CreateInputSample(const uint8_t* aData,
uint32_t aDataSize,
Microseconds aTimestamp,
IMFSample** aOutSample);
HRESULT CreateOutputSample(IMFSample** aOutSample);
HRESULT GetOutputSample(IMFSample** aOutSample);
HRESULT ConfigureVideoFrameGeometry(IMFMediaType* aMediaType);
MFT_INPUT_STREAM_INFO mInputStreamInfo;
MFT_OUTPUT_STREAM_INFO mOutputStreamInfo;
CComPtr<IMFTransform> mDecoder;
int32_t mVideoWidth;
int32_t mVideoHeight;
IntRect mPictureRegion;
int32_t mStride;
};
} // namespace wmf
#endif