OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/media/filter_helpers.h" | 5 #include "webkit/media/filter_helpers.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "media/base/filter_collection.h" | 8 #include "media/base/filter_collection.h" |
9 #include "media/base/message_loop_factory.h" | 9 #include "media/base/message_loop_factory.h" |
10 #include "media/filters/decrypting_audio_decoder.h" | 10 #include "media/filters/decrypting_audio_decoder.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 // DecryptingVideoDecoder only supports encrypted video stream. | 29 // DecryptingVideoDecoder only supports encrypted video stream. |
30 static void AddDefaultDecodersToCollection( | 30 static void AddDefaultDecodersToCollection( |
31 media::MessageLoopFactory* message_loop_factory, | 31 media::MessageLoopFactory* message_loop_factory, |
32 media::FilterCollection* filter_collection, | 32 media::FilterCollection* filter_collection, |
33 ProxyDecryptor* proxy_decryptor) { | 33 ProxyDecryptor* proxy_decryptor) { |
34 scoped_refptr<media::FFmpegAudioDecoder> ffmpeg_audio_decoder = | 34 scoped_refptr<media::FFmpegAudioDecoder> ffmpeg_audio_decoder = |
35 new media::FFmpegAudioDecoder( | 35 new media::FFmpegAudioDecoder( |
36 base::Bind(&media::MessageLoopFactory::GetMessageLoop, | 36 base::Bind(&media::MessageLoopFactory::GetMessageLoop, |
37 base::Unretained(message_loop_factory), | 37 base::Unretained(message_loop_factory), |
38 media::MessageLoopFactory::kPipeline)); | 38 media::MessageLoopFactory::kPipeline)); |
| 39 filter_collection->GetAudioDecoders()->push_back(ffmpeg_audio_decoder); |
39 | 40 |
40 scoped_refptr<media::DecryptingAudioDecoder> decrypting_audio_decoder = | 41 if (proxy_decryptor) { |
41 new media::DecryptingAudioDecoder( | 42 scoped_refptr<media::DecryptingAudioDecoder> decrypting_audio_decoder = |
42 base::Bind(&media::MessageLoopFactory::GetMessageLoop, | 43 new media::DecryptingAudioDecoder( |
43 base::Unretained(message_loop_factory), | 44 base::Bind(&media::MessageLoopFactory::GetMessageLoop, |
44 media::MessageLoopFactory::kPipeline), | 45 base::Unretained(message_loop_factory), |
45 base::Bind(&ProxyDecryptor::RequestDecryptorNotification, | 46 media::MessageLoopFactory::kPipeline), |
46 base::Unretained(proxy_decryptor))); | 47 base::Bind(&ProxyDecryptor::RequestDecryptorNotification, |
| 48 base::Unretained(proxy_decryptor))); |
| 49 filter_collection->GetAudioDecoders()->push_back(decrypting_audio_decoder); |
47 | 50 |
48 filter_collection->GetAudioDecoders()->push_back(ffmpeg_audio_decoder); | 51 scoped_refptr<media::DecryptingVideoDecoder> decrypting_video_decoder = |
49 filter_collection->GetAudioDecoders()->push_back(decrypting_audio_decoder); | 52 new media::DecryptingVideoDecoder( |
50 | 53 base::Bind(&media::MessageLoopFactory::GetMessageLoop, |
51 scoped_refptr<media::DecryptingVideoDecoder> decrypting_video_decoder = | 54 base::Unretained(message_loop_factory), |
52 new media::DecryptingVideoDecoder( | 55 media::MessageLoopFactory::kPipeline), |
53 base::Bind(&media::MessageLoopFactory::GetMessageLoop, | 56 base::Bind(&ProxyDecryptor::RequestDecryptorNotification, |
54 base::Unretained(message_loop_factory), | 57 base::Unretained(proxy_decryptor))); |
55 media::MessageLoopFactory::kPipeline), | 58 // TODO(xhwang): Ideally we should have decrypting video decoder after |
56 base::Bind(&ProxyDecryptor::RequestDecryptorNotification, | 59 // regular video decoder since in the real world most videos are not |
57 base::Unretained(proxy_decryptor))); | 60 // encrypted. For now FFmpegVideoDecoder can also do decryption |
| 61 // (decrypt-only), and we perfer DecryptingVideoDecoder (decrypt-and-decode) |
| 62 // to FFmpegVideoDecoder. Fix this order when we move decryption out of |
| 63 // FFmpegVideoDecoder. |
| 64 filter_collection->GetVideoDecoders()->push_back(decrypting_video_decoder); |
| 65 } |
58 | 66 |
59 scoped_refptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder = | 67 scoped_refptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder = |
60 new media::FFmpegVideoDecoder( | 68 new media::FFmpegVideoDecoder( |
61 base::Bind(&media::MessageLoopFactory::GetMessageLoop, | 69 base::Bind(&media::MessageLoopFactory::GetMessageLoop, |
62 base::Unretained(message_loop_factory), | 70 base::Unretained(message_loop_factory), |
63 media::MessageLoopFactory::kPipeline), | 71 media::MessageLoopFactory::kPipeline), |
64 proxy_decryptor); | 72 proxy_decryptor); |
65 | 73 |
66 // TODO(xhwang): Ideally we should have decrypting video decoder after | |
67 // regular video decoder since in the real world most videos are not | |
68 // encrypted. For now FFmpegVideoDecoder can also do decryption | |
69 // (decrypt-only), and we perfer DecryptingVideoDecoder (decrypt-and-decode) | |
70 // to FFmpegVideoDecoder. Fix this order when we move decryption out of | |
71 // FFmpegVideoDecoder. | |
72 filter_collection->GetVideoDecoders()->push_back(decrypting_video_decoder); | |
73 filter_collection->GetVideoDecoders()->push_back(ffmpeg_video_decoder); | 74 filter_collection->GetVideoDecoders()->push_back(ffmpeg_video_decoder); |
74 } | 75 } |
75 | 76 |
76 bool BuildMediaStreamCollection(const WebKit::WebURL& url, | 77 bool BuildMediaStreamCollection(const WebKit::WebURL& url, |
77 MediaStreamClient* client, | 78 MediaStreamClient* client, |
78 media::MessageLoopFactory* message_loop_factory, | 79 media::MessageLoopFactory* message_loop_factory, |
79 media::FilterCollection* filter_collection) { | 80 media::FilterCollection* filter_collection) { |
80 if (!client) | 81 if (!client) |
81 return false; | 82 return false; |
82 | 83 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 filter_collection->SetDemuxer(new media::FFmpegDemuxer( | 122 filter_collection->SetDemuxer(new media::FFmpegDemuxer( |
122 message_loop_factory->GetMessageLoop( | 123 message_loop_factory->GetMessageLoop( |
123 media::MessageLoopFactory::kPipeline), | 124 media::MessageLoopFactory::kPipeline), |
124 data_source)); | 125 data_source)); |
125 | 126 |
126 AddDefaultDecodersToCollection(message_loop_factory, filter_collection, | 127 AddDefaultDecodersToCollection(message_loop_factory, filter_collection, |
127 proxy_decryptor); | 128 proxy_decryptor); |
128 } | 129 } |
129 | 130 |
130 } // webkit_media | 131 } // webkit_media |
OLD | NEW |