Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openh264 for openSUSE:Factory checked in at 2022-03-23 20:19:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openh264 (Old) and /work/SRC/openSUSE:Factory/.openh264.new.25692 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openh264" Wed Mar 23 20:19:03 2022 rev:2 rq:964275 version:2.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/openh264/openh264.changes 2022-01-14 23:14:29.082679911 +0100 +++ /work/SRC/openSUSE:Factory/.openh264.new.25692/openh264.changes 2022-03-23 20:20:57.754550481 +0100 @@ -1,0 +2,9 @@ +Wed Mar 16 11:21:48 UTC 2022 - Neal Gompa <ngo...@opensuse.org> + +- Update to 2.2.0 + + Add support for B-slice error concealment + + Thread decoding support for multi-slice frame + + Some Bug fixes for B-frame decoding + + Some minor bug fixes + +------------------------------------------------------------------- Old: ---- gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560.tar.gz openh264-2.1.1.tar.gz New: ---- gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a.tar.gz openh264-2.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openh264.spec ++++++ --- /var/tmp/diff_new_pack.BniyTU/_old 2022-03-23 20:20:58.950551157 +0100 +++ /var/tmp/diff_new_pack.BniyTU/_new 2022-03-23 20:20:58.954551160 +0100 @@ -18,14 +18,14 @@ # moz plugin commit hash -%global commit1 c5f1d0f3213178818cbfb3e16f31d07328980560 +%global commit1 3a01c086d1b0394238ff1b5ad22e76022830625a %global somajor 6 %global libname lib%{name}-%{somajor} %global devname lib%{name}-devel Name: openh264 -Version: 2.1.1 +Version: 2.2.0 Release: 0 Summary: H.264 codec library Group: Productivity/Multimedia/Other @@ -80,7 +80,10 @@ %autosetup -a1 mv gmp-api-%{commit1} gmp-api + +%build # Update the makefile with our build options +# Must be done in %%build in order to pick up correct LDFLAGS. sed -i -e 's|^CFLAGS_OPT=.*$|CFLAGS_OPT=%{build_cflags}|' Makefile sed -i -e 's|^PREFIX=.*$|PREFIX=%{_prefix}|' Makefile sed -i -e 's|^LIBDIR_NAME=.*$|LIBDIR_NAME=%{_lib}|' Makefile @@ -89,8 +92,6 @@ sed -i -e '/^CFLAGS_OPT=/i LDFLAGS=%{build_ldflags}' Makefile %endif - -%build # First build the openh264 libraries %make_build ++++++ gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560.tar.gz -> gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/CODE_OF_CONDUCT.md new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/CODE_OF_CONDUCT.md --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/CODE_OF_CONDUCT.md 1970-01-01 01:00:00.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/CODE_OF_CONDUCT.md 2021-10-12 22:10:41.000000000 +0200 @@ -0,0 +1,15 @@ +# Community Participation Guidelines + +This repository is governed by Mozilla's code of conduct and etiquette guidelines. +For more details, please read the +[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). + +## How to Report +For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page. + +<!-- +## Project Specific Etiquette + +In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html). +Please update for your project. +--> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-async-shutdown.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-async-shutdown.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-async-shutdown.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-async-shutdown.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_ASYNC_SHUTDOWN_H_ -#define GMP_ASYNC_SHUTDOWN_H_ - -#define GMP_API_ASYNC_SHUTDOWN "async-shutdown" - -// API exposed by the plugin library to manage asynchronous shutdown. -// Some plugins require special cleanup which may need to make calls -// to host services and wait for async responses. -// -// To enable a plugins to block shutdown until its async shutdown is -// complete, implement the GMPAsyncShutdown interface and return it when -// your plugin's GMPGetAPI function is called with "async-shutdown". -// When your GMPAsyncShutdown's BeginShutdown() implementation is called -// by the GMP host, you should initate your async shutdown process. -// Once you have completed shutdown, call the ShutdownComplete() function -// of the GMPAsyncShutdownHost that is passed as the host argument to the -// GMPGetAPI() call. -// -// Note: Your GMP's GMPShutdown function will still be called after your -// call to ShutdownComplete(). -// -// API name macro: GMP_API_ASYNC_SHUTDOWN -// Host API: GMPAsyncShutdownHost -class GMPAsyncShutdown { -public: - virtual ~GMPAsyncShutdown() {} - - virtual void BeginShutdown() = 0; -}; - -class GMPAsyncShutdownHost { -public: - virtual ~GMPAsyncShutdownHost() {} - - virtual void ShutdownComplete() = 0; -}; - -#endif // GMP_ASYNC_SHUTDOWN_H_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-codec.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-codec.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-codec.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-codec.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,43 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_AUDIO_CODEC_h_ -#define GMP_AUDIO_CODEC_h_ - -#include <stdint.h> - -enum GMPAudioCodecType -{ - kGMPAudioCodecAAC, - kGMPAudioCodecVorbis, - kGMPAudioCodecInvalid // Should always be last. -}; - -struct GMPAudioCodec -{ - GMPAudioCodecType mCodecType; - uint32_t mChannelCount; - uint32_t mBitsPerChannel; - uint32_t mSamplesPerSecond; - - // Codec extra data, such as vorbis setup header, or - // AAC AudioSpecificConfig. - // These are null/0 if not externally negotiated - const uint8_t* mExtraData; - uint32_t mExtraDataLen; -}; - -#endif // GMP_AUDIO_CODEC_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-decode.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-decode.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-decode.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-decode.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,84 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_AUDIO_DECODE_h_ -#define GMP_AUDIO_DECODE_h_ - -#include "gmp-errors.h" -#include "gmp-audio-samples.h" -#include "gmp-audio-codec.h" -#include <stdint.h> - -// ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPAudioDecoderCallback -{ -public: - virtual ~GMPAudioDecoderCallback() {} - - virtual void Decoded(GMPAudioSamples* aDecodedSamples) = 0; - - virtual void InputDataExhausted() = 0; - - virtual void DrainComplete() = 0; - - virtual void ResetComplete() = 0; - - // Called when the decoder encounters a catestrophic error and cannot - // continue. Gecko will not send any more input for decoding. - virtual void Error(GMPErr aError) = 0; -}; - -#define GMP_API_AUDIO_DECODER "decode-audio" - -// Audio decoding for a single stream. A GMP may be asked to create multiple -// decoders concurrently. -// -// API name macro: GMP_API_AUDIO_DECODER -// Host API: GMPAudioHost -// -// ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPAudioDecoder -{ -public: - virtual ~GMPAudioDecoder() {} - - // aCallback: Subclass should retain reference to it until DecodingComplete - // is called. Do not attempt to delete it, host retains ownership. - // TODO: Pass AudioHost so decoder can create GMPAudioEncodedFrame objects? - virtual void InitDecode(const GMPAudioCodec& aCodecSettings, - GMPAudioDecoderCallback* aCallback) = 0; - - // Decode encoded audio frames (as a part of an audio stream). The decoded - // frames must be returned to the user through the decode complete callback. - virtual void Decode(GMPAudioSamples* aEncodedSamples) = 0; - - // Reset decoder state and prepare for a new call to Decode(...). - // Flushes the decoder pipeline. - // The decoder should enqueue a task to run ResetComplete() on the main - // thread once the reset has finished. - virtual void Reset() = 0; - - // Output decoded frames for any data in the pipeline, regardless of ordering. - // All remaining decoded frames should be immediately returned via callback. - // The decoder should enqueue a task to run DrainComplete() on the main - // thread once the reset has finished. - virtual void Drain() = 0; - - // May free decoder memory. - virtual void DecodingComplete() = 0; -}; - -#endif // GMP_VIDEO_DECODE_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-host.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-host.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-host.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-host.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_AUDIO_HOST_h_ -#define GMP_AUDIO_HOST_h_ - -#include "gmp-errors.h" -#include "gmp-audio-samples.h" - -class GMPAudioHost -{ -public: - // Construct various Audio API objects. Host does not retain reference, - // caller is owner and responsible for deleting. - virtual GMPErr CreateSamples(GMPAudioFormat aFormat, - GMPAudioSamples** aSamples) = 0; -}; - -#endif // GMP_AUDIO_HOST_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-samples.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-samples.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-audio-samples.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-audio-samples.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,74 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_AUDIO_FRAME_h_ -#define GMP_AUDIO_FRAME_h_ - -#include <stdint.h> -#include "gmp-errors.h" -#include "gmp-decryption.h" - -enum GMPAudioFormat -{ - kGMPAudioEncodedSamples, // Raw compressed data, i.e. an AAC/Vorbis packet. - kGMPAudioIS16Samples, // Interleaved int16_t PCM samples. - kGMPAudioSamplesFormatInvalid // Should always be last. -}; - -class GMPAudioSamples { -public: - // The format of the buffer. - virtual GMPAudioFormat GetFormat() = 0; - virtual void Destroy() = 0; - - // MAIN THREAD ONLY - // Buffer size must be exactly what's required to contain all samples in - // the buffer; every byte is assumed to be part of a sample. - virtual GMPErr SetBufferSize(uint32_t aSize) = 0; - - // Size of the buffer in bytes. - virtual uint32_t Size() = 0; - - // Timestamps are in microseconds, and are the playback start time of the - // first sample in the buffer. - virtual void SetTimeStamp(uint64_t aTimeStamp) = 0; - virtual uint64_t TimeStamp() = 0; - virtual const uint8_t* Buffer() const = 0; - virtual uint8_t* Buffer() = 0; - - // Get metadata describing how this frame is encrypted, or nullptr if the - // buffer is not encrypted. - virtual const GMPEncryptedBufferMetadata* GetDecryptionData() const = 0; - - virtual uint32_t Channels() const = 0; - virtual void SetChannels(uint32_t aChannels) = 0; - - // Rate; the number of frames per second, where a "frame" is one sample for - // each channel. - // - // For IS16 samples, the number of samples should be: - // Size() / (Channels() * sizeof(int16_t)). - // - // Note: Channels() and Rate() may not be constant across a decoding - // session. For example the rate for decoded samples may be different - // than the rate advertised by the MP4 container for encoded samples - // for HE-AAC streams with SBR/PS, and an EME-GMP may need to downsample - // to satisfy DRM requirements. - virtual uint32_t Rate() const = 0; - virtual void SetRate(uint32_t aRate) = 0; -}; - -#endif // GMP_AUDIO_FRAME_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-decryption.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-decryption.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-decryption.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-decryption.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,361 +0,0 @@ -/* -* 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. -*/ - -#ifndef GMP_DECRYPTION_h_ -#define GMP_DECRYPTION_h_ - -#include "gmp-platform.h" - -class GMPStringList { -public: - virtual const uint32_t Size() const = 0; - - virtual void StringAt(uint32_t aIndex, - const char** aOutString, uint32_t* aOutLength) const = 0; - - virtual ~GMPStringList() { } -}; - -class GMPEncryptedBufferMetadata { -public: - // Key ID to identify the decryption key. - virtual const uint8_t* KeyId() const = 0; - - // Size (in bytes) of |KeyId()|. - virtual uint32_t KeyIdSize() const = 0; - - // Initialization vector. - virtual const uint8_t* IV() const = 0; - - // Size (in bytes) of |IV|. - virtual uint32_t IVSize() const = 0; - - // Number of entries returned by ClearBytes() and CipherBytes(). - virtual uint32_t NumSubsamples() const = 0; - - virtual const uint16_t* ClearBytes() const = 0; - - virtual const uint32_t* CipherBytes() const = 0; - - virtual ~GMPEncryptedBufferMetadata() {} - - // The set of MediaKeySession IDs associated with this decryption key in - // the current stream. - virtual const GMPStringList* SessionIds() const = 0; -}; - -class GMPBuffer { -public: - virtual uint32_t Id() const = 0; - virtual uint8_t* Data() = 0; - virtual uint32_t Size() const = 0; - virtual void Resize(uint32_t aSize) = 0; - virtual ~GMPBuffer() {} -}; - -// These match to the DOMException codes as per: -// http://www.w3.org/TR/dom/#domexception -enum GMPDOMException { - kGMPNoModificationAllowedError = 7, - kGMPNotFoundError = 8, - kGMPNotSupportedError = 9, - kGMPInvalidStateError = 11, - kGMPSyntaxError = 12, - kGMPInvalidModificationError = 13, - kGMPInvalidAccessError = 15, - kGMPSecurityError = 18, - kGMPAbortError = 20, - kGMPQuotaExceededError = 22, - kGMPTimeoutError = 23 -}; - -enum GMPSessionMessageType { - kGMPLicenseRequest = 0, - kGMPLicenseRenewal = 1, - kGMPLicenseRelease = 2, - kGMPIndividualizationRequest = 3, - kGMPMessageInvalid = 4 // Must always be last. -}; - -enum GMPMediaKeyStatus { - kGMPUsable = 0, - kGMPExpired = 1, - kGMPOutputDownscaled = 2, - kGMPOutputNotAllowed = 3, - kGMPInternalError = 4, - kGMPUnknown = 5, - kGMPMediaKeyStatusInvalid = 6 // Must always be last. -}; - -// Time in milliseconds, as offset from epoch, 1 Jan 1970. -typedef int64_t GMPTimestamp; - -// Capability definitions. The capabilities of the EME GMP are reported -// to Gecko by calling the GMPDecryptorCallback::SetCapabilities() -// callback and specifying the logical OR of the GMP_EME_CAP_* flags below. -// -// Note the DECRYPT and the DECRYPT_AND_DECODE are mutually exclusive; -// only one mode should be reported for each stream type, but different -// modes can be reported for different stream types. -// -// Note: Gecko does not currently support the caps changing at runtime. -// Set them once per plugin initialization, during the startup of -// the GMPdecryptor. - -// Capability; CDM can decrypt encrypted buffers and return still -// compressed buffers back to Gecko for decompression there. -#define GMP_EME_CAP_DECRYPT_AUDIO (uint64_t(1) << 0) -#define GMP_EME_CAP_DECRYPT_VIDEO (uint64_t(1) << 1) - -// Capability; CDM can decrypt and then decode encrypted buffers, -// and return decompressed samples to Gecko for playback. -#define GMP_EME_CAP_DECRYPT_AND_DECODE_AUDIO (uint64_t(1) << 2) -#define GMP_EME_CAP_DECRYPT_AND_DECODE_VIDEO (uint64_t(1) << 3) - -// Callbacks to be called from the CDM. Threadsafe. -class GMPDecryptorCallback { -public: - - // The GMPDecryptor should call this in response to a call to - // GMPDecryptor::CreateSession(). The GMP host calls CreateSession() when - // MediaKeySession.generateRequest() is called by JavaScript. - // After CreateSession() is called, the GMPDecryptor should call - // GMPDecryptorCallback::SetSessionId() to set the sessionId exposed to - // JavaScript on the MediaKeySession on which the generateRequest() was - // called. SetSessionId() must be called before - // GMPDecryptorCallback::SessionMessage() will work. - // aSessionId must be null terminated. - // Note: pass the aCreateSessionToken from the CreateSession() call, - // and then once the session has sent any messages required for the - // license request to be sent, then resolve the aPromiseId that was passed - // to GMPDecryptor::CreateSession(). - // Note: GMPDecryptor::LoadSession() does *not* need to call SetSessionId() - // for GMPDecryptorCallback::SessionMessage() to work. - virtual void SetSessionId(uint32_t aCreateSessionToken, - const char* aSessionId, - uint32_t aSessionIdLength) = 0; - - // Resolves a promise for a session loaded. - // Resolves to false if we don't have any session data stored for the given - // session ID. - // Must be called before SessionMessage(). - virtual void ResolveLoadSessionPromise(uint32_t aPromiseId, - bool aSuccess) = 0; - - // Called to resolve a specified promise with "undefined". - virtual void ResolvePromise(uint32_t aPromiseId) = 0; - - // Called to reject a promise with a DOMException. - // aMessage is logged to the WebConsole. - // aMessage is optional, but if present must be null terminated. - virtual void RejectPromise(uint32_t aPromiseId, - GMPDOMException aException, - const char* aMessage, - uint32_t aMessageLength) = 0; - - // Called by the CDM when it has a message for a session. - // Length parameters should not include null termination. - // aSessionId must be null terminated. - virtual void SessionMessage(const char* aSessionId, - uint32_t aSessionIdLength, - GMPSessionMessageType aMessageType, - const uint8_t* aMessage, - uint32_t aMessageLength) = 0; - - // aSessionId must be null terminated. - virtual void ExpirationChange(const char* aSessionId, - uint32_t aSessionIdLength, - GMPTimestamp aExpiryTime) = 0; - - // Called by the GMP when a session is closed. All file IO - // that a session requires should be complete before calling this. - // aSessionId must be null terminated. - virtual void SessionClosed(const char* aSessionId, - uint32_t aSessionIdLength) = 0; - - // Called by the GMP when an error occurs in a session. - // aSessionId must be null terminated. - // aMessage is logged to the WebConsole. - // aMessage is optional, but if present must be null terminated. - virtual void SessionError(const char* aSessionId, - uint32_t aSessionIdLength, - GMPDOMException aException, - uint32_t aSystemCode, - const char* aMessage, - uint32_t aMessageLength) = 0; - - // Notifies the status of a key. Gecko will not call into the CDM to decrypt - // or decode content encrypted with a key unless the CDM has marked it - // usable first. So a CDM *MUST* mark its usable keys as usable! - virtual void KeyStatusChanged(const char* aSessionId, - uint32_t aSessionIdLength, - const uint8_t* aKeyId, - uint32_t aKeyIdLength, - GMPMediaKeyStatus aStatus) = 0; - - // The CDM must report its capabilites of this CDM. aCaps should be a - // logical OR of the GMP_EME_CAP_* flags. The CDM *MUST* call this - // function and report whether it can decrypt and/or decode. Without - // this, Gecko does not know how to use the CDM and will not send - // samples to the CDM to decrypt or decrypt-and-decode mode. Note a - // CDM cannot change modes once playback has begun. - virtual void SetCapabilities(uint64_t aCaps) = 0; - - // Returns decrypted buffer to Gecko, or reports failure. - virtual void Decrypted(GMPBuffer* aBuffer, GMPErr aResult) = 0; - - virtual ~GMPDecryptorCallback() {} -}; - -// Host interface, passed to GetAPIFunc(), with "decrypt". -class GMPDecryptorHost { -public: - virtual void GetSandboxVoucher(const uint8_t** aVoucher, - uint32_t* aVoucherLength) = 0; - - virtual void GetPluginVoucher(const uint8_t** aVoucher, - uint32_t* aVoucherLength) = 0; - - virtual ~GMPDecryptorHost() {} -}; - -enum GMPSessionType { - kGMPTemporySession = 0, - kGMPPersistentSession = 1, - kGMPSessionInvalid = 2 // Must always be last. -}; - -#define GMP_API_DECRYPTOR "eme-decrypt-v7" - -// XXX remove in bug 1147692 -#define GMP_API_DECRYPTOR_COMPAT "eme-decrypt-v6" - -// API exposed by plugin library to manage decryption sessions. -// When the Host requests this by calling GMPGetAPIFunc(). -// -// API name macro: GMP_API_DECRYPTOR -// Host API: GMPDecryptorHost -class GMPDecryptor { -public: - - // Sets the callback to use with the decryptor to return results - // to Gecko. - // - // The CDM must also call GMPDecryptorCallback::SetCapabilities() - // exactly once during start up, to inform Gecko whether to use the CDM - // in decrypt or decrypt-and-decode mode. - // - // Note: GMPDecryptorCallback::SetCapabilities() must be called before - // Gecko will send any samples for decryption to the GMP. - virtual void Init(GMPDecryptorCallback* aCallback) = 0; - - // Initiates the creation of a session given |aType| and |aInitData|, and - // the generation of a license request message. - // - // This corresponds to a MediaKeySession.generateRequest() call in JS. - // - // The GMPDecryptor must do the following, in order, upon this method - // being called: - // - // 1. Generate a sessionId to expose to JS, and call - // GMPDecryptorCallback::SetSessionId(aCreateSessionToken, sessionId...) - // with the sessionId to be exposed to JS/EME on the MediaKeySession - // object on which generateRequest() was called, and then - // 2. send any messages to JS/EME required to generate a license request - // given the supplied initData, and then - // 3. generate a license request message, and send it to JS/EME, and then - // 4. call GMPDecryptorCallback::ResolvePromise(). - // - // Note: GMPDecryptorCallback::SetSessionId(aCreateSessionToken, sessionId, ...) - // *must* be called before GMPDecryptorCallback::SendMessage(sessionId, ...) - // will work. - // - // If generating the request fails, reject aPromiseId by calling - // GMPDecryptorCallback::RejectPromise(). - virtual void CreateSession(uint32_t aCreateSessionToken, - uint32_t aPromiseId, - const char* aInitDataType, - uint32_t aInitDataTypeSize, - const uint8_t* aInitData, - uint32_t aInitDataSize, - GMPSessionType aSessionType) = 0; - - // Loads a previously loaded persistent session. - // - // This corresponds to a MediaKeySession.load() call in JS. - // - // The GMPDecryptor must do the following, in order, upon this method - // being called: - // - // 1. Send any messages to JS/EME, or read from storage, whatever is - // required to load the session, and then - // 2. if there is no session with the given sessionId loadable, call - // ResolveLoadSessionPromise(aPromiseId, false), otherwise - // 2. mark the session's keys as usable, and then - // 3. update the session's expiration, and then - // 4. call GMPDecryptorCallback::ResolveLoadSessionPromise(aPromiseId, true). - // - // If loading the session fails due to error, reject aPromiseId by calling - // GMPDecryptorCallback::RejectPromise(). - virtual void LoadSession(uint32_t aPromiseId, - const char* aSessionId, - uint32_t aSessionIdLength) = 0; - - // Updates the session with |aResponse|. - // This corresponds to a MediaKeySession.update() call in JS. - virtual void UpdateSession(uint32_t aPromiseId, - const char* aSessionId, - uint32_t aSessionIdLength, - const uint8_t* aResponse, - uint32_t aResponseSize) = 0; - - // Releases the resources (keys) for the specified session. - // This corresponds to a MediaKeySession.close() call in JS. - virtual void CloseSession(uint32_t aPromiseId, - const char* aSessionId, - uint32_t aSessionIdLength) = 0; - - // Removes the resources (keys) for the specified session. - // This corresponds to a MediaKeySession.remove() call in JS. - virtual void RemoveSession(uint32_t aPromiseId, - const char* aSessionId, - uint32_t aSessionIdLength) = 0; - - // Resolve/reject promise on completion. - // This corresponds to a MediaKeySession.setServerCertificate() call in JS. - virtual void SetServerCertificate(uint32_t aPromiseId, - const uint8_t* aServerCert, - uint32_t aServerCertSize) = 0; - - // Asynchronously decrypts aBuffer in place. When the decryption is - // complete, GMPDecryptor should write the decrypted data back into the - // same GMPBuffer object and return it to Gecko by calling Decrypted(), - // with the GMPNoErr successcode. If decryption fails, call Decrypted() - // with a failure code, and an error event will fire on the media element. - // Note: When Decrypted() is called and aBuffer is passed back, aBuffer - // is deleted. Don't forget to call Decrypted(), as otherwise aBuffer's - // memory will leak! - virtual void Decrypt(GMPBuffer* aBuffer, - GMPEncryptedBufferMetadata* aMetadata) = 0; - - // Called when the decryption operations are complete. - // Do not call the GMPDecryptorCallback's functions after this is called. - virtual void DecryptingComplete() = 0; - - virtual ~GMPDecryptor() {} -}; - -#endif // GMP_DECRYPTION_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-entrypoints.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-entrypoints.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-entrypoints.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-entrypoints.h 2021-10-12 22:10:41.000000000 +0200 @@ -40,9 +40,11 @@ /* C functions exposed by Gecko Media Plugin shared library. */ // GMPInit -// - Called once after plugin library is loaded, before GMPGetAPI or GMPShutdown are called. +// - Called once after plugin library is loaded, before GMPGetAPI or GMPShutdown +// are called. // - Called on main thread. -// - 'aPlatformAPI' is a structure containing platform-provided APIs. It is valid until +// - 'aPlatformAPI' is a structure containing platform-provided APIs. It is +// valid until // 'GMPShutdown' is called. Owned and must be deleted by plugin. typedef GMPErr (*GMPInitFunc)(const GMPPlatformAPI* aPlatformAPI); @@ -55,21 +57,17 @@ // make sure you compare aAPIName against the corresponding GMP_API_* macro! // - 'aHostAPI' is the host API which is specific to the API being requested // from the plugin. It is valid so long as the API object requested from the -// plugin is valid. It is owned by the host, plugin should not attempt to delete. -// May be null. -// - 'aPluginAPI' is for returning the requested API. Destruction of the requsted +// plugin is valid. It is owned by the host, plugin should not attempt to +// delete. May be null. +// - 'aPluginAPI' is for returning the requested API. Destruction of the +// requsted // API object is defined by the API. -typedef GMPErr (*GMPGetAPIFunc)(const char* aAPIName, void* aHostAPI, void** aPluginAPI); +typedef GMPErr (*GMPGetAPIFunc)(const char* aAPIName, void* aHostAPI, + void** aPluginAPI); // GMPShutdown // - Called once before exiting process (unloading library). // - Called on main thread. -typedef void (*GMPShutdownFunc)(void); +typedef void (*GMPShutdownFunc)(void); -// GMPSetNodeId -// - Optional, not required to be implemented. Only useful for EME plugins. -// - Called after GMPInit to set the device-bound origin-specific node id -// that this GMP instance is running under. -typedef void (*GMPSetNodeIdFunc)(const char* aNodeId, uint32_t aLength); - -#endif // GMP_ENTRYPOINTS_h_ +#endif // GMP_ENTRYPOINTS_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-errors.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-errors.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-errors.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-errors.h 2021-10-12 22:10:41.000000000 +0200 @@ -48,10 +48,12 @@ GMPEndOfEnumeration = 11, GMPInvalidArgErr = 12, GMPAbortedErr = 13, - GMPLastErr // Placeholder, must be last. This enum's values must remain consecutive! + GMPRecordCorrupted = 14, + GMPLastErr // Placeholder, must be last. This enum's values must remain + // consecutive! } GMPErr; #define GMP_SUCCEEDED(x) ((x) == GMPNoErr) #define GMP_FAILED(x) ((x) != GMPNoErr) -#endif // GMP_ERRORS_h_ +#endif // GMP_ERRORS_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-platform.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-platform.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-platform.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-platform.h 2021-10-12 22:10:41.000000000 +0200 @@ -40,27 +40,27 @@ /* Platform helper API. */ class GMPTask { -public: - virtual void Destroy() = 0; // Deletes object. - virtual ~GMPTask() {} + public: + virtual void Destroy() = 0; // Deletes object. + virtual ~GMPTask() = default; virtual void Run() = 0; }; class GMPThread { -public: - virtual ~GMPThread() {} + public: + virtual ~GMPThread() = default; virtual void Post(GMPTask* aTask) = 0; - virtual void Join() = 0; // Deletes object after join completes. + virtual void Join() = 0; // Deletes object after join completes. }; // A re-entrant monitor; can be locked from the same thread multiple times. // Must be unlocked the same number of times it's locked. class GMPMutex { -public: - virtual ~GMPMutex() {} + public: + virtual ~GMPMutex() = default; virtual void Acquire() = 0; virtual void Release() = 0; - virtual void Destroy() = 0; // Deletes object. + virtual void Destroy() = 0; // Deletes object. }; // Time is defined as the number of milliseconds since the @@ -79,31 +79,16 @@ GMPRecordClient* aClient); // Call on main thread only. -typedef GMPErr (*GMPSetTimerOnMainThreadPtr)(GMPTask* aTask, int64_t aTimeoutMS); +typedef GMPErr (*GMPSetTimerOnMainThreadPtr)(GMPTask* aTask, + int64_t aTimeoutMS); typedef GMPErr (*GMPGetCurrentTimePtr)(GMPTimestamp* aOutTime); -typedef void (*RecvGMPRecordIteratorPtr)(GMPRecordIterator* aRecordIterator, - void* aUserArg, - GMPErr aStatus); - -// Creates a GMPCreateRecordIterator to enumerate the records in storage. -// When the iterator is ready, the function at aRecvIteratorFunc -// is called with the GMPRecordIterator as an argument. If the operation -// fails, RecvGMPRecordIteratorPtr is called with a failure aStatus code. -// The list that the iterator is covering is fixed when -// GMPCreateRecordIterator is called, it is *not* updated when changes are -// made to storage. -// Iterator begins pointing at first record. -// aUserArg is passed to the aRecvIteratorFunc upon completion. -typedef GMPErr (*GMPCreateRecordIteratorPtr)(RecvGMPRecordIteratorPtr aRecvIteratorFunc, - void* aUserArg); - struct GMPPlatformAPI { // Increment the version when things change. Can only add to the struct, // do not change what already exists. Pointers to functions may be NULL // when passed to plugins, but beware backwards compat implications of // doing that. - uint16_t version; // Currently version 0 + uint16_t version; // Currently version 0 GMPCreateThreadPtr createthread; GMPRunOnMainThreadPtr runonmainthread; @@ -112,7 +97,6 @@ GMPCreateRecordPtr createrecord; GMPSetTimerOnMainThreadPtr settimer; GMPGetCurrentTimePtr getcurrenttime; - GMPCreateRecordIteratorPtr getrecordenumerator; }; -#endif // GMP_PLATFORM_h_ +#endif // GMP_PLATFORM_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-storage.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-storage.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-storage.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-storage.h 2021-10-12 22:10:41.000000000 +0200 @@ -1,18 +1,18 @@ /* -* 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. -*/ + * 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. + */ #ifndef GMP_STORAGE_h_ #define GMP_STORAGE_h_ @@ -40,8 +40,7 @@ // GMPRecord to delete the GMPRecord object's memory. If your GMP does not // call Close(), the GMPRecord's memory will leak. class GMPRecord { -public: - + public: // Opens the record. Calls OpenComplete() once the record is open. // Note: Only work when GMP is loading content from a webserver. // Does not work for web pages on loaded from disk. @@ -65,14 +64,13 @@ // callbacks. virtual GMPErr Close() = 0; - virtual ~GMPRecord() {} + virtual ~GMPRecord() = default; }; // Callback object that receives the results of GMPRecord calls. Callbacks // run asynchronously to the GMPRecord call, on the main thread. class GMPRecordClient { public: - // Response to a GMPRecord::Open() call with the open |status|. // aStatus values: // - GMPNoErr - Record opened successfully. Record may be empty. @@ -94,8 +92,7 @@ // - GMPGenericErr - Unspecified error. // If aStatus is not GMPNoErr, the GMPRecord is unusable, and you must // call Close() on the GMPRecord to dispose of it. - virtual void ReadComplete(GMPErr aStatus, - const uint8_t* aData, + virtual void ReadComplete(GMPErr aStatus, const uint8_t* aData, uint32_t aDataSize) = 0; // Response to a GMPRecord::Write() call. @@ -107,35 +104,7 @@ // call Close() on the GMPRecord to dispose of it. virtual void WriteComplete(GMPErr aStatus) = 0; - virtual ~GMPRecordClient() {} -}; - -// Iterates over the records that are available. Note: this list maintains -// a snapshot of the records that were present when the iterator was created. -// Create by calling the GMPCreateRecordIteratorPtr function on the -// GMPPlatformAPI struct. -// Iteration is in alphabetical order. -class GMPRecordIterator { -public: - // Retrieve the name for the current record. - // aOutName is null terminated at character at index (*aOutNameLength). - // Returns GMPNoErr if successful, or GMPEndOfEnumeration if iteration has - // reached the end. - virtual GMPErr GetName(const char ** aOutName, uint32_t * aOutNameLength) = 0; - - // Advance iteration to the next record. - // Returns GMPNoErr if successful, or GMPEndOfEnumeration if iteration has - // reached the end. - virtual GMPErr NextRecord() = 0; - - // Signals to the GMP host that the GMP is finished with the - // GMPRecordIterator. GMPs must call this to release memory held by - // the GMPRecordIterator. Do not access the GMPRecordIterator pointer - // after calling this! - // Memory retrieved by GetName is *not* valid after calling Close()! - virtual void Close() = 0; - - virtual ~GMPRecordIterator() {} + virtual ~GMPRecordClient() = default; }; -#endif // GMP_STORAGE_h_ +#endif // GMP_STORAGE_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-codec.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-codec.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-codec.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-codec.h 2021-10-12 22:10:41.000000000 +0200 @@ -37,33 +37,31 @@ #include <stdint.h> #include <stddef.h> -enum { kGMPPayloadNameSize = 32}; -enum { kGMPMaxSimulcastStreams = 4}; +enum { kGMPPayloadNameSize = 32 }; +enum { kGMPMaxSimulcastStreams = 4 }; -enum GMPVideoCodecComplexity -{ +enum GMPVideoCodecComplexity { kGMPComplexityNormal = 0, kGMPComplexityHigh = 1, kGMPComplexityHigher = 2, kGMPComplexityMax = 3, - kGMPComplexityInvalid // Should always be last + kGMPComplexityInvalid // Should always be last }; enum GMPVP8ResilienceMode { - kResilienceOff, // The stream produced by the encoder requires a - // recovery frame (typically a key frame) to be - // decodable after a packet loss. - kResilientStream, // A stream produced by the encoder is resilient to - // packet losses, but packets within a frame subsequent - // to a loss can't be decoded. - kResilientFrames, // Same as kResilientStream but with added resilience - // within a frame. - kResilienceInvalid // Should always be last. + kResilienceOff, // The stream produced by the encoder requires a + // recovery frame (typically a key frame) to be + // decodable after a packet loss. + kResilientStream, // A stream produced by the encoder is resilient to + // packet losses, but packets within a frame subsequent + // to a loss can't be decoded. + kResilientFrames, // Same as kResilientStream but with added resilience + // within a frame. + kResilienceInvalid // Should always be last. }; // VP8 specific -struct GMPVideoCodecVP8 -{ +struct GMPVideoCodecVP8 { bool mPictureLossIndicationOn; bool mFeedbackModeOn; GMPVideoCodecComplexity mComplexity; @@ -78,19 +76,20 @@ // Needs to match a binary spec for this structure. // Note: the mSPS at the end of this structure is variable length. -struct GMPVideoCodecH264AVCC -{ - uint8_t mVersion; // == 0x01 - uint8_t mProfile; // these 3 are profile_level_id - uint8_t mConstraints; - uint8_t mLevel; - uint8_t mLengthSizeMinusOne; // lower 2 bits (== GMPBufferType-1). Top 6 reserved (1's) +struct GMPVideoCodecH264AVCC { + uint8_t mVersion; // == 0x01 + uint8_t mProfile; // these 3 are profile_level_id + uint8_t mConstraints; + uint8_t mLevel; + uint8_t mLengthSizeMinusOne; // lower 2 bits (== GMPBufferType-1). Top 6 + // reserved (1's) // SPS/PPS will not generally be present for interactive use unless SDP // parameter-sets are used. - uint8_t mNumSPS; // lower 5 bits; top 5 reserved (1's) + uint8_t mNumSPS; // lower 5 bits; top 5 reserved (1's) - /*** uint8_t mSPS[]; (Not defined due to compiler warnings and warnings-as-errors ...) **/ + /*** uint8_t mSPS[]; (Not defined due to compiler warnings and + * warnings-as-errors ...) **/ // Following mNumSPS is a variable number of bytes, which is the SPS and PPS. // Each SPS == 16 bit size, ("N"), then "N" bytes, // then uint8_t mNumPPS, then each PPS == 16 bit size ("N"), then "N" bytes. @@ -99,62 +98,61 @@ // Codec specific data for H.264 decoding/encoding. // Cast the "aCodecSpecific" parameter of GMPVideoDecoder::InitDecode() and // GMPVideoEncoder::InitEncode() to this structure. -struct GMPVideoCodecH264 -{ - uint8_t mPacketizationMode; // 0 or 1 - struct GMPVideoCodecH264AVCC mAVCC; // holds a variable-sized struct GMPVideoCodecH264AVCC mAVCC; +struct GMPVideoCodecH264 { + uint8_t mPacketizationMode; // 0 or 1 + struct GMPVideoCodecH264AVCC + mAVCC; // holds a variable-sized struct GMPVideoCodecH264AVCC mAVCC; }; -enum GMPVideoCodecType -{ +enum GMPVideoCodecType { kGMPVideoCodecVP8, // Encoded frames are in AVCC format; NAL length field of 4 bytes, followed // by frame data. May be multiple NALUs per sample. Codec specific extra data // is the AVCC extra data (in AVCC format). kGMPVideoCodecH264, - kGMPVideoCodecInvalid // Should always be last. + kGMPVideoCodecVP9, + kGMPVideoCodecInvalid // Should always be last. }; // Simulcast is when the same stream is encoded multiple times with different // settings such as resolution. -struct GMPSimulcastStream -{ +struct GMPSimulcastStream { uint32_t mWidth; uint32_t mHeight; uint32_t mNumberOfTemporalLayers; - uint32_t mMaxBitrate; // kilobits/sec. - uint32_t mTargetBitrate; // kilobits/sec. - uint32_t mMinBitrate; // kilobits/sec. - uint32_t mQPMax; // minimum quality + uint32_t mMaxBitrate; // kilobits/sec. + uint32_t mTargetBitrate; // kilobits/sec. + uint32_t mMinBitrate; // kilobits/sec. + uint32_t mQPMax; // minimum quality }; enum GMPVideoCodecMode { kGMPRealtimeVideo, kGMPScreensharing, kGMPStreamingVideo, - kGMPCodecModeInvalid // Should always be last. + kGMPCodecModeInvalid // Should always be last. }; enum GMPApiVersion { - kGMPVersion32 = 1, // leveraging that V32 had mCodecType first, and only supported H264 + kGMPVersion32 = + 1, // leveraging that V32 had mCodecType first, and only supported H264 kGMPVersion33 = 33, }; -struct GMPVideoCodec -{ +struct GMPVideoCodec { uint32_t mGMPApiVersion; GMPVideoCodecType mCodecType; - char mPLName[kGMPPayloadNameSize]; // Must be NULL-terminated! + char mPLName[kGMPPayloadNameSize]; // Must be NULL-terminated! uint32_t mPLType; uint32_t mWidth; uint32_t mHeight; - uint32_t mStartBitrate; // kilobits/sec. - uint32_t mMaxBitrate; // kilobits/sec. - uint32_t mMinBitrate; // kilobits/sec. + uint32_t mStartBitrate; // kilobits/sec. + uint32_t mMaxBitrate; // kilobits/sec. + uint32_t mMinBitrate; // kilobits/sec. uint32_t mMaxFramerate; bool mFrameDroppingOn; @@ -190,23 +188,21 @@ // Note: if any pointers are added to this struct, it must be fitted // with a copy-constructor. See below. -struct GMPCodecSpecificInfoVP8 -{ +struct GMPCodecSpecificInfoVP8 { bool mHasReceivedSLI; uint8_t mPictureIdSLI; bool mHasReceivedRPSI; uint64_t mPictureIdRPSI; - int16_t mPictureId; // negative value to skip pictureId + int16_t mPictureId; // negative value to skip pictureId bool mNonReference; uint8_t mSimulcastIdx; uint8_t mTemporalIdx; bool mLayerSync; - int32_t mTL0PicIdx; // negative value to skip tl0PicIdx - int8_t mKeyIdx; // negative value to skip keyIdx + int32_t mTL0PicIdx; // negative value to skip tl0PicIdx + int8_t mKeyIdx; // negative value to skip keyIdx }; -union GMPCodecSpecificInfoUnion -{ +union GMPCodecSpecificInfoUnion { GMPCodecSpecificInfoGeneric mGeneric; GMPCodecSpecificInfoVP8 mVP8; GMPCodecSpecificInfoH264 mH264; @@ -215,11 +211,10 @@ // Note: if any pointers are added to this struct or its sub-structs, it // must be fitted with a copy-constructor. This is because it is copied // in the copy-constructor of VCMEncodedFrame. -struct GMPCodecSpecificInfo -{ +struct GMPCodecSpecificInfo { GMPVideoCodecType mCodecType; GMPBufferType mBufferType; GMPCodecSpecificInfoUnion mCodecSpecific; }; -#endif // GMP_VIDEO_CODEC_h_ +#endif // GMP_VIDEO_CODEC_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-decode.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-decode.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-decode.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-decode.h 2021-10-12 22:10:41.000000000 +0200 @@ -41,9 +41,8 @@ #include <stdint.h> // ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPVideoDecoderCallback -{ -public: +class GMPVideoDecoderCallback { + public: virtual ~GMPVideoDecoderCallback() {} virtual void Decoded(GMPVideoi420Frame* aDecodedFrame) = 0; @@ -72,9 +71,8 @@ // Host API: GMPVideoHost // // ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPVideoDecoder -{ -public: +class GMPVideoDecoder { + public: virtual ~GMPVideoDecoder() {} // - aCodecSettings: Details of decoder to create. @@ -82,7 +80,8 @@ // to get codec specific config data. // - aCodecSpecificLength: number of bytes in aCodecSpecific. // - aCallback: Subclass should retain reference to it until DecodingComplete - // is called. Do not attempt to delete it, host retains ownership. + // is called. Do not attempt to delete it, host retains + // ownership. // aCoreCount: number of CPU cores. virtual void InitDecode(const GMPVideoCodec& aCodecSettings, const uint8_t* aCodecSpecific, @@ -102,8 +101,7 @@ // - aCodecSpecificInfoLength : number of bytes in aCodecSpecificInfo // - renderTimeMs : System time to render in milliseconds. Only used by // decoders with internal rendering. - virtual void Decode(GMPVideoEncodedFrame* aInputFrame, - bool aMissingFrames, + virtual void Decode(GMPVideoEncodedFrame* aInputFrame, bool aMissingFrames, const uint8_t* aCodecSpecificInfo, uint32_t aCodecSpecificInfoLength, int64_t aRenderTimeMs = -1) = 0; @@ -124,4 +122,4 @@ virtual void DecodingComplete() = 0; }; -#endif // GMP_VIDEO_DECODE_h_ +#endif // GMP_VIDEO_DECODE_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-encode.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-encode.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-encode.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-encode.h 2021-10-12 22:10:41.000000000 +0200 @@ -43,9 +43,8 @@ #include "gmp-video-codec.h" // ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPVideoEncoderCallback -{ -public: +class GMPVideoEncoderCallback { + public: virtual ~GMPVideoEncoderCallback() {} virtual void Encoded(GMPVideoEncodedFrame* aEncodedFrame, @@ -66,9 +65,8 @@ // Host API: GMPVideoHost // // ALL METHODS MUST BE CALLED ON THE MAIN THREAD -class GMPVideoEncoder -{ -public: +class GMPVideoEncoder { + public: virtual ~GMPVideoEncoder() {} // Initialize the encoder with the information from the VideoCodec. @@ -80,7 +78,8 @@ // this codec type. // - aCodecSpecificLength : number of bytes in aCodecSpecific // - aCallback: Subclass should retain reference to it until EncodingComplete - // is called. Do not attempt to delete it, host retains ownership. + // is called. Do not attempt to delete it, host retains + // ownership. // - aNnumberOfCores : Number of cores available for the encoder // - aMaxPayloadSize : The maximum size each payload is allowed // to have. Usually MTU - overhead. @@ -88,8 +87,7 @@ const uint8_t* aCodecSpecific, uint32_t aCodecSpecificLength, GMPVideoEncoderCallback* aCallback, - int32_t aNumberOfCores, - uint32_t aMaxPayloadSize) = 0; + int32_t aNumberOfCores, uint32_t aMaxPayloadSize) = 0; // Encode an I420 frame (as a part of a video stream). The encoded frame // will be returned to the user through the encode complete callback. @@ -122,8 +120,8 @@ // - frameRate : The target frame rate virtual void SetRates(uint32_t aNewBitRate, uint32_t aFrameRate) = 0; - // Use this function to enable or disable periodic key frames. Can be useful for codecs - // which have other ways of stopping error propagation. + // Use this function to enable or disable periodic key frames. Can be useful + // for codecs which have other ways of stopping error propagation. // // - enable : Enable or disable periodic key frames virtual void SetPeriodicKeyFrames(bool aEnable) = 0; @@ -132,4 +130,4 @@ virtual void EncodingComplete() = 0; }; -#endif // GMP_VIDEO_ENCODE_h_ +#endif // GMP_VIDEO_ENCODE_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame-encoded.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame-encoded.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame-encoded.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame-encoded.h 2021-10-12 22:10:41.000000000 +0200 @@ -35,18 +35,16 @@ #define GMP_VIDEO_FRAME_ENCODED_h_ #include <stdint.h> -#include "gmp-decryption.h" #include "gmp-video-frame.h" #include "gmp-video-codec.h" -enum GMPVideoFrameType -{ +enum GMPVideoFrameType { kGMPKeyFrame = 0, kGMPDeltaFrame = 1, kGMPGoldenFrame = 2, kGMPAltRefFrame = 3, kGMPSkipFrame = 4, - kGMPVideoFrameInvalid = 5 // Must always be last. + kGMPVideoFrameInvalid = 5 // Must always be last. }; // The implementation backing this interface uses shared memory for the @@ -58,42 +56,37 @@ // // Methods that create or destroy shared memory must be called on the main // thread. They are marked below. -class GMPVideoEncodedFrame : public GMPVideoFrame -{ -public: +class GMPVideoEncodedFrame : public GMPVideoFrame { + public: // MAIN THREAD ONLY virtual GMPErr CreateEmptyFrame(uint32_t aSize) = 0; // MAIN THREAD ONLY virtual GMPErr CopyFrame(const GMPVideoEncodedFrame& aVideoFrame) = 0; - virtual void SetEncodedWidth(uint32_t aEncodedWidth) = 0; + virtual void SetEncodedWidth(uint32_t aEncodedWidth) = 0; virtual uint32_t EncodedWidth() = 0; - virtual void SetEncodedHeight(uint32_t aEncodedHeight) = 0; + virtual void SetEncodedHeight(uint32_t aEncodedHeight) = 0; virtual uint32_t EncodedHeight() = 0; // Microseconds - virtual void SetTimeStamp(uint64_t aTimeStamp) = 0; + virtual void SetTimeStamp(uint64_t aTimeStamp) = 0; virtual uint64_t TimeStamp() = 0; // Set frame duration (microseconds) // NOTE: next-frame's Timestamp() != this-frame's TimeStamp()+Duration() // depending on rounding to avoid having to track roundoff errors // and dropped/missing frames(!) (which may leave a large gap) - virtual void SetDuration(uint64_t aDuration) = 0; + virtual void SetDuration(uint64_t aDuration) = 0; virtual uint64_t Duration() const = 0; - virtual void SetFrameType(GMPVideoFrameType aFrameType) = 0; + virtual void SetFrameType(GMPVideoFrameType aFrameType) = 0; virtual GMPVideoFrameType FrameType() = 0; - virtual void SetAllocatedSize(uint32_t aNewSize) = 0; + virtual void SetAllocatedSize(uint32_t aNewSize) = 0; virtual uint32_t AllocatedSize() = 0; - virtual void SetSize(uint32_t aSize) = 0; + virtual void SetSize(uint32_t aSize) = 0; virtual uint32_t Size() = 0; - virtual void SetCompleteFrame(bool aCompleteFrame) = 0; - virtual bool CompleteFrame() = 0; + virtual void SetCompleteFrame(bool aCompleteFrame) = 0; + virtual bool CompleteFrame() = 0; virtual const uint8_t* Buffer() const = 0; - virtual uint8_t* Buffer() = 0; - virtual GMPBufferType BufferType() const = 0; - virtual void SetBufferType(GMPBufferType aBufferType) = 0; - - // Get metadata describing how this frame is encrypted, or nullptr if the - // frame is not encrypted. - virtual const GMPEncryptedBufferMetadata* GetDecryptionData() const = 0; + virtual uint8_t* Buffer() = 0; + virtual GMPBufferType BufferType() const = 0; + virtual void SetBufferType(GMPBufferType aBufferType) = 0; }; -#endif // GMP_VIDEO_FRAME_ENCODED_h_ +#endif // GMP_VIDEO_FRAME_ENCODED_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame-i420.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame-i420.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame-i420.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame-i420.h 2021-10-12 22:10:41.000000000 +0200 @@ -57,14 +57,15 @@ // Methods that create or destroy shared memory must be called on the main // thread. They are marked below. class GMPVideoi420Frame : public GMPVideoFrame { -public: + public: // MAIN THREAD ONLY // CreateEmptyFrame: Sets frame dimensions and allocates buffers based // on set dimensions - height and plane stride. // If required size is bigger than the allocated one, new buffers of adequate // size will be allocated. virtual GMPErr CreateEmptyFrame(int32_t aWidth, int32_t aHeight, - int32_t aStride_y, int32_t aStride_u, int32_t aStride_v) = 0; + int32_t aStride_y, int32_t aStride_u, + int32_t aStride_v) = 0; // MAIN THREAD ONLY // CreateFrame: Sets the frame's members and buffers. If required size is @@ -72,8 +73,8 @@ virtual GMPErr CreateFrame(int32_t aSize_y, const uint8_t* aBuffer_y, int32_t aSize_u, const uint8_t* aBuffer_u, int32_t aSize_v, const uint8_t* aBuffer_v, - int32_t aWidth, int32_t aHeight, - int32_t aStride_y, int32_t aStride_u, int32_t aStride_v) = 0; + int32_t aWidth, int32_t aHeight, int32_t aStride_y, + int32_t aStride_u, int32_t aStride_v) = 0; // MAIN THREAD ONLY // Copy frame: If required size is bigger than allocated one, new buffers of @@ -125,8 +126,9 @@ // Return true if underlying plane buffers are of zero size, false if not. virtual bool IsZeroSize() const = 0; - // Reset underlying plane buffers sizes to 0. This function doesn't clear memory. + // Reset underlying plane buffers sizes to 0. This function doesn't clear + // memory. virtual void ResetSize() = 0; }; -#endif // GMP_VIDEO_FRAME_I420_h_ +#endif // GMP_VIDEO_FRAME_I420_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-frame.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-frame.h 2021-10-12 22:10:41.000000000 +0200 @@ -36,16 +36,13 @@ #include "gmp-video-plane.h" -enum GMPVideoFrameFormat { - kGMPEncodedVideoFrame = 0, - kGMPI420VideoFrame = 1 -}; +enum GMPVideoFrameFormat { kGMPEncodedVideoFrame = 0, kGMPI420VideoFrame = 1 }; class GMPVideoFrame { -public: + public: virtual GMPVideoFrameFormat GetFrameFormat() = 0; // MAIN THREAD ONLY IF OWNING PROCESS virtual void Destroy() = 0; }; -#endif // GMP_VIDEO_FRAME_h_ +#endif // GMP_VIDEO_FRAME_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-host.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-host.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-host.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-host.h 2021-10-12 22:10:41.000000000 +0200 @@ -40,14 +40,14 @@ #include "gmp-video-codec.h" // This interface must be called on the main thread only. -class GMPVideoHost -{ -public: +class GMPVideoHost { + public: // Construct various video API objects. Host does not retain reference, // caller is owner and responsible for deleting. // MAIN THREAD ONLY - virtual GMPErr CreateFrame(GMPVideoFrameFormat aFormat, GMPVideoFrame** aFrame) = 0; + virtual GMPErr CreateFrame(GMPVideoFrameFormat aFormat, + GMPVideoFrame** aFrame) = 0; virtual GMPErr CreatePlane(GMPPlane** aPlane) = 0; }; -#endif // GMP_VIDEO_HOST_h_ +#endif // GMP_VIDEO_HOST_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-plane.h new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-plane.h --- old/gmp-api-c5f1d0f3213178818cbfb3e16f31d07328980560/gmp-video-plane.h 2015-03-27 00:25:19.000000000 +0100 +++ new/gmp-api-3a01c086d1b0394238ff1b5ad22e76022830625a/gmp-video-plane.h 2021-10-12 22:10:41.000000000 +0200 @@ -47,13 +47,12 @@ // Methods that create or destroy shared memory must be called on the main // thread. They are marked below. class GMPPlane { -public: + public: // MAIN THREAD ONLY // CreateEmptyPlane - set allocated size, actual plane size and stride: // If current size is smaller than current size, then a buffer of sufficient // size will be allocated. - virtual GMPErr CreateEmptyPlane(int32_t aAllocatedSize, - int32_t aStride, + virtual GMPErr CreateEmptyPlane(int32_t aAllocatedSize, int32_t aStride, int32_t aPlaneSize) = 0; // MAIN THREAD ONLY @@ -63,7 +62,8 @@ // MAIN THREAD ONLY // Copy buffer: If current size is smaller // than current size, then a buffer of sufficient size will be allocated. - virtual GMPErr Copy(int32_t aSize, int32_t aStride, const uint8_t* aBuffer) = 0; + virtual GMPErr Copy(int32_t aSize, int32_t aStride, + const uint8_t* aBuffer) = 0; // Swap plane data. virtual void Swap(GMPPlane& aPlane) = 0; @@ -91,4 +91,4 @@ virtual void Destroy() = 0; }; -#endif // GMP_VIDEO_PLANE_h_ +#endif // GMP_VIDEO_PLANE_h_ ++++++ openh264-2.1.1.tar.gz -> openh264-2.2.0.tar.gz ++++++ /work/SRC/openSUSE:Factory/openh264/openh264-2.1.1.tar.gz /work/SRC/openSUSE:Factory/.openh264.new.25692/openh264-2.2.0.tar.gz differ: char 15, line 1