| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
| 2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
| 3 // LICENSE file. | 3 // LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 5 #ifndef MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
| 6 #define MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 6 #define MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/waitable_event.h" | 10 #include "base/waitable_event.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 MockFilterConfig() | 38 MockFilterConfig() |
| 39 : data_source_behavior(MOCK_DATA_SOURCE_NORMAL_INIT), | 39 : data_source_behavior(MOCK_DATA_SOURCE_NORMAL_INIT), |
| 40 has_video(true), | 40 has_video(true), |
| 41 video_width(1280u), | 41 video_width(1280u), |
| 42 video_height(720u), | 42 video_height(720u), |
| 43 video_surface_format(VideoSurface::YV12), | 43 video_surface_format(VideoSurface::YV12), |
| 44 compressed_audio_mime_type(mime_type::kAACAudio), | 44 compressed_audio_mime_type(mime_type::kAACAudio), |
| 45 uncompressed_audio_mime_type(mime_type::kUncompressedAudio), | 45 uncompressed_audio_mime_type(mime_type::kUncompressedAudio), |
| 46 compressed_video_mime_type(mime_type::kH264AnnexB), | 46 compressed_video_mime_type(mime_type::kH264AnnexB), |
| 47 uncompressed_video_mime_type(mime_type::kUncompressedVideo), | 47 uncompressed_video_mime_type(mime_type::kUncompressedVideo), |
| 48 frame_duration(base::TimeDelta::FromMicroseconds(33333)) { | 48 frame_duration(base::TimeDelta::FromMicroseconds(33333)), |
| 49 media_duration(base::TimeDelta::FromSeconds(5)) { |
| 49 } | 50 } |
| 50 | 51 |
| 51 MockDataSourceBehavior data_source_behavior; | 52 MockDataSourceBehavior data_source_behavior; |
| 52 bool has_video; | 53 bool has_video; |
| 53 size_t video_width; | 54 size_t video_width; |
| 54 size_t video_height; | 55 size_t video_height; |
| 55 VideoSurface::Format video_surface_format; | 56 VideoSurface::Format video_surface_format; |
| 56 std::string compressed_audio_mime_type; | 57 std::string compressed_audio_mime_type; |
| 57 std::string uncompressed_audio_mime_type; | 58 std::string uncompressed_audio_mime_type; |
| 58 std::string compressed_video_mime_type; | 59 std::string compressed_video_mime_type; |
| 59 std::string uncompressed_video_mime_type; | 60 std::string uncompressed_video_mime_type; |
| 60 base::TimeDelta frame_duration; | 61 base::TimeDelta frame_duration; |
| 62 base::TimeDelta media_duration; |
| 61 }; | 63 }; |
| 62 | 64 |
| 63 | 65 |
| 64 class MockDataSource : public media::DataSource { | 66 class MockDataSource : public DataSource { |
| 65 public: | 67 public: |
| 66 static FilterFactory* CreateFactory(const MockFilterConfig* config) { | 68 static FilterFactory* CreateFactory(const MockFilterConfig* config) { |
| 67 return new FilterFactoryImpl1<MockDataSource, | 69 return new FilterFactoryImpl1<MockDataSource, |
| 68 const MockFilterConfig*>(config); | 70 const MockFilterConfig*>(config); |
| 69 } | 71 } |
| 70 | 72 |
| 71 // Implementation of MediaFilter. | 73 // Implementation of MediaFilter. |
| 72 virtual void Stop() {} | 74 virtual void Stop() {} |
| 73 | 75 |
| 74 // Implementation of DataSource. | 76 // Implementation of DataSource. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 virtual bool SetPosition(int64 position) { | 118 virtual bool SetPosition(int64 position) { |
| 117 return true; | 119 return true; |
| 118 } | 120 } |
| 119 | 121 |
| 120 virtual bool GetSize(int64* size_out) { | 122 virtual bool GetSize(int64* size_out) { |
| 121 *size_out = 0; | 123 *size_out = 0; |
| 122 return false; | 124 return false; |
| 123 } | 125 } |
| 124 | 126 |
| 125 private: | 127 private: |
| 126 friend class media::FilterFactoryImpl1<MockDataSource, | 128 friend class FilterFactoryImpl1<MockDataSource, |
| 127 const MockFilterConfig*>; | 129 const MockFilterConfig*>; |
| 128 | 130 |
| 129 explicit MockDataSource(const MockFilterConfig* config) | 131 explicit MockDataSource(const MockFilterConfig* config) |
| 130 : behavior_(config->data_source_behavior) { | 132 : behavior_(config->data_source_behavior) { |
| 131 } | 133 } |
| 132 | 134 |
| 133 virtual ~MockDataSource() {} | 135 virtual ~MockDataSource() {} |
| 134 | 136 |
| 135 void TaskBehavior() { | 137 void TaskBehavior() { |
| 136 switch (behavior_) { | 138 switch (behavior_) { |
| 137 case MOCK_DATA_SOURCE_TASK_ERROR_POST_INIT: | 139 case MOCK_DATA_SOURCE_TASK_ERROR_POST_INIT: |
| (...skipping 20 matching lines...) Expand all Loading... |
| 158 public: | 160 public: |
| 159 static FilterFactory* CreateFactory(const MockFilterConfig* config) { | 161 static FilterFactory* CreateFactory(const MockFilterConfig* config) { |
| 160 return new FilterFactoryImpl1<MockDemuxer, | 162 return new FilterFactoryImpl1<MockDemuxer, |
| 161 const MockFilterConfig*>(config); | 163 const MockFilterConfig*>(config); |
| 162 } | 164 } |
| 163 | 165 |
| 164 // Implementation of MediaFilter. | 166 // Implementation of MediaFilter. |
| 165 virtual void Stop() {} | 167 virtual void Stop() {} |
| 166 | 168 |
| 167 // Implementation of Demuxer. | 169 // Implementation of Demuxer. |
| 168 virtual bool Initialize(media::DataSource* data_source) { | 170 virtual bool Initialize(DataSource* data_source) { |
| 169 host_->InitializationComplete(); | 171 host_->InitializationComplete(); |
| 170 return true; | 172 return true; |
| 171 } | 173 } |
| 172 | 174 |
| 173 virtual size_t GetNumberOfStreams() { | 175 virtual size_t GetNumberOfStreams() { |
| 174 if (config_->has_video) { | 176 if (config_->has_video) { |
| 175 return 2; | 177 return 2; |
| 176 } | 178 } |
| 177 return 1; | 179 return 1; |
| 178 } | 180 } |
| 179 | 181 |
| 180 virtual media::DemuxerStream* GetStream(int stream_id) { | 182 virtual DemuxerStream* GetStream(int stream_id) { |
| 181 switch (stream_id) { | 183 switch (stream_id) { |
| 182 case 0: | 184 case 0: |
| 183 return &mock_audio_stream_; | 185 return &mock_audio_stream_; |
| 184 case 1: | 186 case 1: |
| 185 if (config_->has_video) { | 187 if (config_->has_video) { |
| 186 return &mock_video_stream_; | 188 return &mock_video_stream_; |
| 187 } | 189 } |
| 188 // Fall-through is correct if no video. | 190 // Fall-through is correct if no video. |
| 189 default: | 191 default: |
| 190 ADD_FAILURE(); | 192 ADD_FAILURE(); |
| 191 return NULL; | 193 return NULL; |
| 192 } | 194 } |
| 193 } | 195 } |
| 194 | 196 |
| 195 private: | 197 private: |
| 196 friend class media::FilterFactoryImpl1<MockDemuxer, const MockFilterConfig*>; | 198 friend class FilterFactoryImpl1<MockDemuxer, const MockFilterConfig*>; |
| 197 | 199 |
| 198 explicit MockDemuxer(const MockFilterConfig* config) | 200 explicit MockDemuxer(const MockFilterConfig* config) |
| 199 : config_(config), | 201 : config_(config), |
| 200 mock_audio_stream_(config->compressed_audio_mime_type), | 202 mock_audio_stream_(config->compressed_audio_mime_type), |
| 201 mock_video_stream_(config->compressed_video_mime_type) { | 203 mock_video_stream_(config->compressed_video_mime_type) { |
| 202 } | 204 } |
| 203 | 205 |
| 204 virtual ~MockDemuxer() {} | 206 virtual ~MockDemuxer() {} |
| 205 | 207 |
| 206 // Internal class implements DemuxerStream interface. | 208 // Internal class implements DemuxerStream interface. |
| 207 class MockDemuxerStream : public DemuxerStream { | 209 class MockDemuxerStream : public DemuxerStream { |
| 208 public: | 210 public: |
| 209 explicit MockDemuxerStream(const std::string& mime_type) { | 211 explicit MockDemuxerStream(const std::string& mime_type) { |
| 210 media_format_.SetAsString(MediaFormat::kMimeType, mime_type); | 212 media_format_.SetAsString(MediaFormat::kMimeType, mime_type); |
| 211 } | 213 } |
| 212 | 214 |
| 213 virtual ~MockDemuxerStream() {} | 215 virtual ~MockDemuxerStream() {} |
| 214 | 216 |
| 215 // Implementation of DemuxerStream. | 217 // Implementation of DemuxerStream. |
| 216 virtual const MediaFormat* GetMediaFormat() { | 218 virtual const MediaFormat* GetMediaFormat() { |
| 217 return &media_format_; // TODO(ralphl): implement | 219 return &media_format_; |
| 218 } | 220 } |
| 219 | 221 |
| 220 virtual void Read(Assignable<Buffer>* buffer) { | 222 virtual void Read(Assignable<Buffer>* buffer) { |
| 221 NOTREACHED(); // TODO(ralphl): fix me!! | 223 NOTREACHED(); // TODO(ralphl): fix me!! |
| 222 } | 224 } |
| 223 | 225 |
| 224 private: | 226 private: |
| 225 MediaFormat media_format_; | 227 MediaFormat media_format_; |
| 226 | 228 |
| 227 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream); | 229 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 virtual const MediaFormat* GetMediaFormat() { | 261 virtual const MediaFormat* GetMediaFormat() { |
| 260 return &media_format_; | 262 return &media_format_; |
| 261 } | 263 } |
| 262 | 264 |
| 263 virtual void Read(Assignable<Buffer>* buffer) { | 265 virtual void Read(Assignable<Buffer>* buffer) { |
| 264 // TODO(ralphl): implement mock read. | 266 // TODO(ralphl): implement mock read. |
| 265 NOTREACHED(); | 267 NOTREACHED(); |
| 266 } | 268 } |
| 267 | 269 |
| 268 private: | 270 private: |
| 269 friend class media::FilterFactoryImpl1<MockAudioDecoder, | 271 friend class FilterFactoryImpl1<MockAudioDecoder, const MockFilterConfig*>; |
| 270 const MockFilterConfig*>; | |
| 271 | 272 |
| 272 explicit MockAudioDecoder(const MockFilterConfig* config) { | 273 explicit MockAudioDecoder(const MockFilterConfig* config) { |
| 273 media_format_.SetAsString(MediaFormat::kMimeType, | 274 media_format_.SetAsString(MediaFormat::kMimeType, |
| 274 config->uncompressed_audio_mime_type); | 275 config->uncompressed_audio_mime_type); |
| 275 } | 276 } |
| 276 | 277 |
| 277 virtual ~MockAudioDecoder() {} | 278 virtual ~MockAudioDecoder() {} |
| 278 | 279 |
| 279 MediaFormat media_format_; | 280 MediaFormat media_format_; |
| 280 | 281 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 299 | 300 |
| 300 // Implementation of AudioRenderer. | 301 // Implementation of AudioRenderer. |
| 301 virtual bool Initialize(AudioDecoder* decoder) { | 302 virtual bool Initialize(AudioDecoder* decoder) { |
| 302 host_->InitializationComplete(); | 303 host_->InitializationComplete(); |
| 303 return true; | 304 return true; |
| 304 } | 305 } |
| 305 | 306 |
| 306 virtual void SetVolume(float volume) {} | 307 virtual void SetVolume(float volume) {} |
| 307 | 308 |
| 308 private: | 309 private: |
| 309 friend class media::FilterFactoryImpl1<MockAudioRenderer, | 310 friend class FilterFactoryImpl1<MockAudioRenderer, const MockFilterConfig*>; |
| 310 const MockFilterConfig*>; | |
| 311 | 311 |
| 312 explicit MockAudioRenderer(const MockFilterConfig* config) {} | 312 explicit MockAudioRenderer(const MockFilterConfig* config) {} |
| 313 | 313 |
| 314 virtual ~MockAudioRenderer() {} | 314 virtual ~MockAudioRenderer() {} |
| 315 | 315 |
| 316 DISALLOW_COPY_AND_ASSIGN(MockAudioRenderer); | 316 DISALLOW_COPY_AND_ASSIGN(MockAudioRenderer); |
| 317 }; | 317 }; |
| 318 | 318 |
| 319 //------------------------------------------------------------------------------ | 319 //------------------------------------------------------------------------------ |
| 320 | 320 |
| 321 class MockVideoFrame : public VideoFrame { | 321 class MockVideoFrame : public VideoFrame { |
| 322 public: | 322 public: |
| 323 explicit MockVideoFrame(const MockFilterConfig* config, | 323 explicit MockVideoFrame(const MockFilterConfig* config, |
| 324 base::TimeDelta timestamp) | 324 base::TimeDelta timestamp) |
| 325 : config_(config), | 325 : config_(config), |
| 326 surface_locked_(false), | 326 surface_locked_(false) { |
| 327 timestamp_(timestamp), | 327 SetTimestamp(timestamp); |
| 328 duration_(config->frame_duration) { | 328 SetDuration(config->frame_duration); |
| 329 size_t y_byte_count = config_->video_width * config_->video_height; |
| 330 size_t uv_byte_count = y_byte_count / 4; |
| 331 surface_.format = config_->video_surface_format; |
| 332 surface_.width = config_->video_width; |
| 333 surface_.height = config_->video_height; |
| 334 surface_.planes = 3; |
| 335 surface_.data[0] = new char[y_byte_count]; |
| 336 surface_.data[1] = new char[uv_byte_count]; |
| 337 surface_.data[2] = new char[uv_byte_count]; |
| 338 surface_.strides[0] = config_->video_width; |
| 339 surface_.strides[1] = config_->video_width / 2; |
| 340 surface_.strides[2] = config_->video_width / 2; |
| 341 memset(surface_.data[0], 0, y_byte_count); |
| 342 memset(surface_.data[1], 0x80, uv_byte_count); |
| 343 memset(surface_.data[2], 0x80, uv_byte_count); |
| 344 int64 num_white_pixels = y_byte_count * |
| 345 timestamp.InMicroseconds() / |
| 346 config_->media_duration.InMicroseconds(); |
| 347 if (num_white_pixels > y_byte_count) { |
| 348 ADD_FAILURE(); |
| 349 num_white_pixels = y_byte_count; |
| 350 } |
| 351 if (num_white_pixels < 0) { |
| 352 ADD_FAILURE(); |
| 353 num_white_pixels = 0; |
| 354 } |
| 355 memset(surface_.data[0], 0xFF, static_cast<size_t>(num_white_pixels)); |
| 329 } | 356 } |
| 330 | 357 |
| 331 virtual ~MockVideoFrame() {} | 358 virtual ~MockVideoFrame() { |
| 332 | 359 delete[] surface_.data[0]; |
| 333 virtual base::TimeDelta GetTimestamp() const { | 360 delete[] surface_.data[1]; |
| 334 return timestamp_; | 361 delete[] surface_.data[2]; |
| 335 } | |
| 336 | |
| 337 virtual base::TimeDelta GetDuration() const { | |
| 338 return duration_; | |
| 339 } | |
| 340 | |
| 341 virtual void SetTimestamp(const base::TimeDelta& timestamp) { | |
| 342 timestamp_ = timestamp; | |
| 343 } | |
| 344 | |
| 345 virtual void SetDuration(const base::TimeDelta& duration) { | |
| 346 duration_ = duration; | |
| 347 } | 362 } |
| 348 | 363 |
| 349 virtual bool Lock(VideoSurface* surface) { | 364 virtual bool Lock(VideoSurface* surface) { |
| 350 EXPECT_FALSE(surface_locked_); | 365 EXPECT_FALSE(surface_locked_); |
| 366 if (surface_locked_) { |
| 367 memset(surface, 0, sizeof(*surface)); |
| 368 return false; |
| 369 } |
| 351 surface_locked_ = true; | 370 surface_locked_ = true; |
| 352 surface->format = config_->video_surface_format; | 371 DCHECK(sizeof(*surface) == sizeof(surface_)); |
| 353 surface->width = config_->video_width; | 372 memcpy(surface, &surface_, sizeof(*surface)); |
| 354 surface->height = config_->video_height; | 373 return true; |
| 355 // TODO(ralphl): mock the data for video surfaces too. | |
| 356 surface->planes = 3; | |
| 357 surface->data[0] = NULL; | |
| 358 surface->data[1] = NULL; | |
| 359 surface->data[2] = NULL; | |
| 360 surface->strides[0] = 0; | |
| 361 surface->strides[1] = 0; | |
| 362 surface->strides[2] = 0; | |
| 363 return false; | |
| 364 } | 374 } |
| 365 | 375 |
| 366 virtual void Unlock() { | 376 virtual void Unlock() { |
| 367 EXPECT_TRUE(surface_locked_); | 377 EXPECT_TRUE(surface_locked_); |
| 368 surface_locked_ = false; | 378 surface_locked_ = false; |
| 369 } | 379 } |
| 370 | 380 |
| 371 private: | 381 private: |
| 372 const MockFilterConfig* config_; | 382 const MockFilterConfig* config_; |
| 373 bool surface_locked_; | 383 bool surface_locked_; |
| 374 base::TimeDelta timestamp_; | 384 VideoSurface surface_; |
| 375 base::TimeDelta duration_; | |
| 376 | 385 |
| 377 DISALLOW_COPY_AND_ASSIGN(MockVideoFrame); | 386 DISALLOW_COPY_AND_ASSIGN(MockVideoFrame); |
| 378 }; | 387 }; |
| 379 | 388 |
| 380 class MockVideoDecoder : public VideoDecoder { | 389 class MockVideoDecoder : public VideoDecoder { |
| 381 public: | 390 public: |
| 382 static FilterFactory* CreateFactory(const MockFilterConfig* config) { | 391 static FilterFactory* CreateFactory(const MockFilterConfig* config) { |
| 383 return new FilterFactoryImpl1<MockVideoDecoder, | 392 return new FilterFactoryImpl1<MockVideoDecoder, |
| 384 const MockFilterConfig*>(config); | 393 const MockFilterConfig*>(config); |
| 385 } | 394 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 400 virtual const MediaFormat* GetMediaFormat() { | 409 virtual const MediaFormat* GetMediaFormat() { |
| 401 return &media_format_; | 410 return &media_format_; |
| 402 } | 411 } |
| 403 | 412 |
| 404 virtual void Read(Assignable<VideoFrame>* buffer) { | 413 virtual void Read(Assignable<VideoFrame>* buffer) { |
| 405 buffer->AddRef(); | 414 buffer->AddRef(); |
| 406 host_->PostTask(NewRunnableMethod(this, &MockVideoDecoder::DoRead, buffer)); | 415 host_->PostTask(NewRunnableMethod(this, &MockVideoDecoder::DoRead, buffer)); |
| 407 } | 416 } |
| 408 | 417 |
| 409 private: | 418 private: |
| 410 friend class media::FilterFactoryImpl1<MockVideoDecoder, | 419 friend class FilterFactoryImpl1<MockVideoDecoder, const MockFilterConfig*>; |
| 411 const MockFilterConfig*>; | |
| 412 | 420 |
| 413 explicit MockVideoDecoder(const MockFilterConfig* config) | 421 explicit MockVideoDecoder(const MockFilterConfig* config) |
| 414 : config_(config) { | 422 : config_(config) { |
| 415 media_format_.SetAsString(MediaFormat::kMimeType, | 423 media_format_.SetAsString(MediaFormat::kMimeType, |
| 416 config->uncompressed_video_mime_type); | 424 config->uncompressed_video_mime_type); |
| 417 media_format_.SetAsInteger(MediaFormat::kWidth, config->video_width); | 425 media_format_.SetAsInteger(MediaFormat::kWidth, config->video_width); |
| 418 media_format_.SetAsInteger(MediaFormat::kHeight, config->video_height); | 426 media_format_.SetAsInteger(MediaFormat::kHeight, config->video_height); |
| 419 } | 427 } |
| 420 | 428 |
| 421 void DoRead(Assignable<VideoFrame>* buffer) { | 429 void DoRead(Assignable<VideoFrame>* buffer) { |
| 422 VideoFrame* frame = new MockVideoFrame(config_, mock_frame_time_); | 430 if (mock_frame_time_ < config_->media_duration) { |
| 423 mock_frame_time_ += config_->frame_duration; | 431 VideoFrame* frame = new MockVideoFrame(config_, mock_frame_time_); |
| 424 buffer->SetBuffer(frame); | 432 mock_frame_time_ += config_->frame_duration; |
| 425 buffer->OnAssignment(); | 433 if (mock_frame_time_ >= config_->media_duration) { |
| 434 frame->SetEndOfStream(true); |
| 435 } |
| 436 buffer->SetBuffer(frame); |
| 437 buffer->OnAssignment(); |
| 438 } |
| 426 buffer->Release(); | 439 buffer->Release(); |
| 427 } | 440 } |
| 428 | 441 |
| 429 virtual ~MockVideoDecoder() {} | 442 virtual ~MockVideoDecoder() {} |
| 430 | 443 |
| 431 MediaFormat media_format_; | 444 MediaFormat media_format_; |
| 432 base::TimeDelta mock_frame_time_; | 445 base::TimeDelta mock_frame_time_; |
| 433 const MockFilterConfig* config_; | 446 const MockFilterConfig* config_; |
| 434 | 447 |
| 435 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder); | 448 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 452 virtual void Stop() {} | 465 virtual void Stop() {} |
| 453 | 466 |
| 454 // Implementation of VideoRenderer. | 467 // Implementation of VideoRenderer. |
| 455 virtual bool Initialize(VideoDecoder* decoder) { | 468 virtual bool Initialize(VideoDecoder* decoder) { |
| 456 host_->SetVideoSize(config_->video_width, config_->video_height); | 469 host_->SetVideoSize(config_->video_width, config_->video_height); |
| 457 host_->InitializationComplete(); | 470 host_->InitializationComplete(); |
| 458 return true; | 471 return true; |
| 459 } | 472 } |
| 460 | 473 |
| 461 private: | 474 private: |
| 462 friend class media::FilterFactoryImpl1<MockVideoRenderer, | 475 friend class FilterFactoryImpl1<MockVideoRenderer, const MockFilterConfig*>; |
| 463 const MockFilterConfig*>; | |
| 464 | 476 |
| 465 explicit MockVideoRenderer(const MockFilterConfig* config) | 477 explicit MockVideoRenderer(const MockFilterConfig* config) |
| 466 : config_(config) { | 478 : config_(config) { |
| 467 } | 479 } |
| 468 | 480 |
| 469 virtual ~MockVideoRenderer() {} | 481 virtual ~MockVideoRenderer() {} |
| 470 | 482 |
| 471 const MockFilterConfig* config_; | 483 const MockFilterConfig* config_; |
| 472 | 484 |
| 473 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer); | 485 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer); |
| 474 }; | 486 }; |
| 475 | 487 |
| 476 | 488 |
| 477 | |
| 478 //------------------------------------------------------------------------------ | 489 //------------------------------------------------------------------------------ |
| 479 // Simple class that derives from the WaitableEvent class. The event remains | 490 // Simple class that derives from the WaitableEvent class. The event remains |
| 480 // in the reset state until the initialization complete callback is called from | 491 // in the reset state until the initialization complete callback is called from |
| 481 // a media pipeline. The normal use of this object looks like: | 492 // a media pipeline. The normal use of this object looks like: |
| 482 // Pipeline p; | 493 // Pipeline p; |
| 483 // FilterFactoryCollection f; | 494 // FilterFactoryCollection f; |
| 484 // f->AddFactory(a); | 495 // f->AddFactory(a); |
| 485 // f->AddFactory(b); | 496 // f->AddFactory(b); |
| 486 // ... | 497 // ... |
| 487 // InitializationHelper h; | 498 // InitializationHelper h; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 546 |
| 536 bool callback_success_status_; | 547 bool callback_success_status_; |
| 537 bool waiting_for_callback_; | 548 bool waiting_for_callback_; |
| 538 | 549 |
| 539 DISALLOW_COPY_AND_ASSIGN(InitializationHelper); | 550 DISALLOW_COPY_AND_ASSIGN(InitializationHelper); |
| 540 }; | 551 }; |
| 541 | 552 |
| 542 } // namespace media | 553 } // namespace media |
| 543 | 554 |
| 544 #endif // MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 555 #endif // MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
| OLD | NEW |