@@ -43,22 +43,36 @@ static LazyLogModule sPDMLog("PlatformDecoderModule");
43
43
44
44
namespace media {
45
45
46
- enum class Option {
47
- Default,
48
- LowLatency,
49
- HardwareDecoderNotAllowed,
50
- FullH264Parsing,
51
- ErrorIfNoInitializationData,
52
-
53
-
54
-
55
- DefaultPlaybackDeviceMono,
56
-
57
- KeepOriginalPts,
58
-
59
-
60
- SENTINEL
61
- };
46
+ template <typename T>
47
+ static nsCString EnumSetToString (const EnumSet<T>& aSet) {
48
+ nsCString str;
49
+ for (const auto e : aSet) {
50
+ if (!str.IsEmpty ()) {
51
+ str.AppendLiteral (" |" );
52
+ }
53
+ str.AppendPrintf (" %s" , EnumValueToString (e));
54
+ }
55
+ if (str.IsEmpty ()) {
56
+ str.AppendLiteral (" Empty" );
57
+ }
58
+ return str;
59
+ }
60
+
61
+ MOZ_DEFINE_ENUM_CLASS_WITH_TOSTRING (
62
+ Option,
63
+ (Default, LowLatency, HardwareDecoderNotAllowed, FullH264Parsing,
64
+ ErrorIfNoInitializationData,
65
+
66
+
67
+
68
+ DefaultPlaybackDeviceMono,
69
+
70
+ KeepOriginalPts,
71
+
72
+
73
+ SENTINEL
74
+ ));
75
+
62
76
using OptionSet = EnumSet<Option>;
63
77
64
78
struct UseNullDecoder {
@@ -68,11 +82,22 @@ struct UseNullDecoder {
68
82
};
69
83
70
84
71
- struct NoWrapper {
72
- NoWrapper () = default ;
73
- explicit NoWrapper (bool aDontUseWrapper) : mDontUseWrapper(aDontUseWrapper) {}
74
- bool mDontUseWrapper = false ;
75
- };
85
+ MOZ_DEFINE_ENUM_CLASS_WITH_BASE_AND_TOSTRING (Wrapper, uint8_t ,
86
+ (AudioTrimmer,
87
+ MediaChangeMonitor));
88
+ using WrapperSet = EnumSet<Wrapper>;
89
+ static WrapperSet GetDefaultWrapperSet (const TrackInfo& aInfo) {
90
+
91
+
92
+ WrapperSet set;
93
+ if (aInfo.IsVideo ()) {
94
+ set += Wrapper::MediaChangeMonitor;
95
+ }
96
+ if (aInfo.IsAudio ()) {
97
+ set += Wrapper::AudioTrimmer;
98
+ }
99
+ return set;
100
+ }
76
101
77
102
struct VideoFrameRate {
78
103
VideoFrameRate () = default ;
@@ -104,7 +129,7 @@ struct CreateDecoderParamsForAsync {
104
129
const RefPtr<layers::KnowsCompositor> mKnowsCompositor ;
105
130
const RefPtr<GMPCrashHelper> mCrashHelper ;
106
131
const media::UseNullDecoder mUseNullDecoder ;
107
- const media::NoWrapper mNoWrapper ;
132
+ const media::WrapperSet mWrappers ;
108
133
const TrackInfo::TrackType mType = TrackInfo::kUndefinedTrack ;
109
134
std::function<MediaEventProducer<TrackInfo::TrackType>*()>
110
135
mOnWaitingForKeyEvent ;
@@ -118,14 +143,15 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
118
143
using Option = media::Option;
119
144
using OptionSet = media::OptionSet;
120
145
using UseNullDecoder = media::UseNullDecoder;
121
- using NoWrapper = media::NoWrapper ;
146
+ using WrapperSet = media::WrapperSet ;
122
147
using VideoFrameRate = media::VideoFrameRate;
123
148
enum class EncryptedCustomIdent : bool {
124
149
False,
125
150
True,
126
151
};
127
152
128
- explicit CreateDecoderParams (const TrackInfo& aConfig) : mConfig(aConfig) {}
153
+ explicit CreateDecoderParams (const TrackInfo& aConfig)
154
+ : mConfig(aConfig), mWrappers(media::GetDefaultWrapperSet(aConfig)) {}
129
155
CreateDecoderParams (const CreateDecoderParams& aParams) = default ;
130
156
131
157
MOZ_IMPLICIT CreateDecoderParams (const CreateDecoderParamsForAsync& aParams)
@@ -134,7 +160,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
134
160
mKnowsCompositor(aParams.mKnowsCompositor ),
135
161
mCrashHelper(aParams.mCrashHelper ),
136
162
mUseNullDecoder(aParams.mUseNullDecoder ),
137
- mNoWrapper (aParams.mNoWrapper ),
163
+ mWrappers (aParams.mWrappers ),
138
164
mType(aParams.mType ),
139
165
mOnWaitingForKeyEvent(aParams.mOnWaitingForKeyEvent ),
140
166
mOptions(aParams.mOptions ),
@@ -144,7 +170,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
144
170
145
171
template <typename T1, typename ... Ts>
146
172
CreateDecoderParams (const TrackInfo& aConfig, T1&& a1, Ts&&... args)
147
- : mConfig (aConfig) {
173
+ : mConfig (aConfig), mWrappers (media::GetDefaultWrapperSet(aConfig)) {
148
174
Set (std::forward<T1>(a1), std::forward<Ts>(args)...);
149
175
}
150
176
@@ -164,13 +190,44 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
164
190
return *mConfig .GetAsAudioInfo ();
165
191
}
166
192
193
+ bool IsVideo () const { return mConfig .IsVideo (); }
194
+
195
+ bool IsAudio () const { return mConfig .IsAudio (); }
196
+
167
197
layers::LayersBackend GetLayersBackend () const {
168
198
if (mKnowsCompositor ) {
169
199
return mKnowsCompositor ->GetCompositorBackendType ();
170
200
}
171
201
return layers::LayersBackend::LAYERS_NONE;
172
202
}
173
203
204
+ nsCString ToString () const {
205
+ nsPrintfCString str (" CreateDecoderParams @ %p: " , this );
206
+ str.AppendPrintf (" mConfig = %s" , mConfig .ToString ().get ());
207
+ str.AppendPrintf (" , mImageContainer = %p" , mImageContainer );
208
+ str.AppendPrintf (" , mError = %s" ,
209
+ mError ? mError ->Description ().get () : " null" );
210
+ str.AppendPrintf (" , mKnowsCompositor = %p" , mKnowsCompositor );
211
+ str.AppendPrintf (" , mCrashHelper = %p" , mCrashHelper );
212
+ str.AppendPrintf (" , mUseNullDecoder = %s" ,
213
+ mUseNullDecoder .mUse ? " yes" : " no" );
214
+ str.AppendPrintf (" , mWrappers = %s" , EnumSetToString (mWrappers ).get ());
215
+ str.AppendPrintf (" , mType = %d" , static_cast <int32_t >(mType ));
216
+ str.AppendPrintf (" , mOnWaitingForKeyEvent = %s" ,
217
+ mOnWaitingForKeyEvent ? " yes" : " no" );
218
+ str.AppendPrintf (" , mOptions = %s" , EnumSetToString (mOptions ).get ());
219
+ str.AppendPrintf (" , mRate = %f" , mRate .mValue );
220
+ str.AppendPrintf (
221
+ " , mMediaEngineId = %s" ,
222
+ mMediaEngineId ? std::to_string (*mMediaEngineId ).c_str () : " None" );
223
+ str.AppendPrintf (" , mTrackingId = %s" ,
224
+ mTrackingId ? mTrackingId ->ToString ().get () : " None" );
225
+ str.AppendPrintf (
226
+ " , mEncryptedCustomIdent = %s" ,
227
+ mEncryptedCustomIdent == EncryptedCustomIdent::True ? " true" : " false" );
228
+ return std::move (str);
229
+ }
230
+
174
231
175
232
176
233
@@ -180,7 +237,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
180
237
layers::KnowsCompositor* mKnowsCompositor = nullptr ;
181
238
GMPCrashHelper* mCrashHelper = nullptr ;
182
239
media::UseNullDecoder mUseNullDecoder ;
183
- media::NoWrapper mNoWrapper ;
240
+ WrapperSet mWrappers ;
184
241
TrackInfo::TrackType mType = TrackInfo::kUndefinedTrack ;
185
242
std::function<MediaEventProducer<TrackInfo::TrackType>*()>
186
243
mOnWaitingForKeyEvent ;
@@ -189,7 +246,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
189
246
190
247
Maybe<uint64_t > mMediaEngineId ;
191
248
Maybe<TrackingId> mTrackingId ;
192
- EncryptedCustomIdent mEncryptedCustomIdent ;
249
+ EncryptedCustomIdent mEncryptedCustomIdent = EncryptedCustomIdent::False ;
193
250
194
251
private:
195
252
void Set (layers::ImageContainer* aImageContainer) {
@@ -200,7 +257,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
200
257
void Set (UseNullDecoder aUseNullDecoder) {
201
258
mUseNullDecoder = aUseNullDecoder;
202
259
}
203
- void Set (NoWrapper aNoWrapper ) { mNoWrapper = aNoWrapper ; }
260
+ void Set (const WrapperSet& aWrappers ) { mWrappers = aWrappers ; }
204
261
void Set (const OptionSet& aOptions) { mOptions = aOptions; }
205
262
void Set (VideoFrameRate aRate) { mRate = aRate; }
206
263
void Set (layers::KnowsCompositor* aKnowsCompositor) {
@@ -232,7 +289,7 @@ struct MOZ_STACK_CLASS CreateDecoderParams final {
232
289
mKnowsCompositor = aParams.mKnowsCompositor ;
233
290
mCrashHelper = aParams.mCrashHelper ;
234
291
mUseNullDecoder = aParams.mUseNullDecoder ;
235
- mNoWrapper = aParams.mNoWrapper ;
292
+ mWrappers = aParams.mWrappers ;
236
293
mType = aParams.mType ;
237
294
mOnWaitingForKeyEvent = aParams.mOnWaitingForKeyEvent ;
238
295
mOptions = aParams.mOptions ;
@@ -251,24 +308,25 @@ struct MOZ_STACK_CLASS SupportDecoderParams final {
251
308
using Option = media::Option;
252
309
using OptionSet = media::OptionSet;
253
310
using UseNullDecoder = media::UseNullDecoder;
254
- using NoWrapper = media::NoWrapper ;
311
+ using WrapperSet = media::WrapperSet ;
255
312
using VideoFrameRate = media::VideoFrameRate;
256
313
257
- explicit SupportDecoderParams (const TrackInfo& aConfig) : mConfig(aConfig) {}
314
+ explicit SupportDecoderParams (const TrackInfo& aConfig)
315
+ : mConfig(aConfig), mWrappers(media::GetDefaultWrapperSet(aConfig)) {}
258
316
259
317
explicit SupportDecoderParams (const CreateDecoderParams& aParams)
260
318
: mConfig(aParams.mConfig ),
261
319
mError(aParams.mError ),
262
320
mKnowsCompositor(aParams.mKnowsCompositor ),
263
321
mUseNullDecoder(aParams.mUseNullDecoder ),
264
- mNoWrapper (aParams.mNoWrapper ),
322
+ mWrappers (aParams.mWrappers ),
265
323
mOptions(aParams.mOptions ),
266
324
mRate(aParams.mRate ),
267
325
mMediaEngineId(aParams.mMediaEngineId ) {}
268
326
269
327
template <typename T1, typename ... Ts>
270
328
SupportDecoderParams (const TrackInfo& aConfig, T1&& a1, Ts&&... args)
271
- : mConfig (aConfig) {
329
+ : mConfig (aConfig), mWrappers (media::GetDefaultWrapperSet(aConfig)) {
272
330
Set (std::forward<T1>(a1), std::forward<Ts>(args)...);
273
331
}
274
332
@@ -279,7 +337,7 @@ struct MOZ_STACK_CLASS SupportDecoderParams final {
279
337
MediaResult* mError = nullptr ;
280
338
RefPtr<layers::KnowsCompositor> mKnowsCompositor ;
281
339
UseNullDecoder mUseNullDecoder ;
282
- NoWrapper mNoWrapper ;
340
+ WrapperSet mWrappers ;
283
341
OptionSet mOptions = OptionSet(Option::Default);
284
342
VideoFrameRate mRate ;
285
343
Maybe<uint64_t > mMediaEngineId ;
@@ -292,7 +350,7 @@ struct MOZ_STACK_CLASS SupportDecoderParams final {
292
350
void Set (media::UseNullDecoder aUseNullDecoder) {
293
351
mUseNullDecoder = aUseNullDecoder;
294
352
}
295
- void Set (media::NoWrapper aNoWrapper ) { mNoWrapper = aNoWrapper ; }
353
+ void Set (const WrapperSet& aWrappers ) { mWrappers = aWrappers ; }
296
354
void Set (const media::OptionSet& aOptions) { mOptions = aOptions; }
297
355
void Set (media::VideoFrameRate aRate) { mRate = aRate; }
298
356
void Set (layers::KnowsCompositor* aKnowsCompositor) {
0 commit comments