Chromium Code Reviews| 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/plugins/ppapi/content_decryptor_delegate.h" | 5 #include "webkit/plugins/ppapi/content_decryptor_delegate.h" |
| 6 | 6 |
| 7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "base/message_loop_proxy.h" | 9 #include "base/message_loop_proxy.h" |
| 10 #include "media/base/audio_decoder_config.h" | 10 #include "media/base/audio_decoder_config.h" |
| (...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 997 << " bytes to fit input."; | 997 << " bytes to fit input."; |
| 998 media_resource = ScopedPPResource( | 998 media_resource = ScopedPPResource( |
| 999 ScopedPPResource::PassRef(), | 999 ScopedPPResource::PassRef(), |
| 1000 PPB_Buffer_Impl::Create(pp_instance_, media_resource_size)); | 1000 PPB_Buffer_Impl::Create(pp_instance_, media_resource_size)); |
| 1001 if (!media_resource.get()) { | 1001 if (!media_resource.get()) { |
| 1002 media_resource_size = 0; | 1002 media_resource_size = 0; |
| 1003 return false; | 1003 return false; |
| 1004 } | 1004 } |
| 1005 } | 1005 } |
| 1006 | 1006 |
| 1007 // Take an extra reference on the resource to ensure that the reference count | |
| 1008 // does not reach zero when the PPAPI glue releases its reference. | |
| 1009 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(media_resource); | |
|
dmichael (off chromium)
2012/12/06 19:30:09
If you need an extra reference, then don't use the
Tom Finegan
2012/12/06 22:59:02
I'm trying to make an optimization work: The decry
| |
| 1010 | |
| 1007 EnterResourceNoLock<PPB_Buffer_API> enter(media_resource, true); | 1011 EnterResourceNoLock<PPB_Buffer_API> enter(media_resource, true); |
| 1008 if (enter.failed()) { | 1012 if (enter.failed()) { |
| 1009 media_resource.Release(); | 1013 media_resource.Release(); |
| 1010 media_resource_size = 0; | 1014 media_resource_size = 0; |
| 1011 return false; | 1015 return false; |
| 1012 } | 1016 } |
| 1013 | 1017 |
| 1014 BufferAutoMapper mapper(enter.object()); | 1018 BufferAutoMapper mapper(enter.object()); |
| 1015 if (!mapper.data() || mapper.size() < static_cast<size_t>(size)) { | 1019 if (!mapper.data() || mapper.size() < static_cast<size_t>(size)) { |
| 1016 media_resource.Release(); | 1020 media_resource.Release(); |
| 1017 media_resource_size = 0; | 1021 media_resource_size = 0; |
| 1018 return false; | 1022 return false; |
| 1019 } | 1023 } |
| 1020 memcpy(mapper.data(), data, size); | 1024 memcpy(mapper.data(), data, size); |
| 1021 | 1025 |
| 1022 *resource = media_resource; | 1026 *resource = media_resource; |
|
xhwang
2012/12/06 18:17:23
Shouldn't this line add the reference too? +dmicha
Tom Finegan
2012/12/06 18:32:59
Ref counted objects bake my noodle. :(
It does, b
dmichael (off chromium)
2012/12/06 19:30:09
I guess I don't know what semantics you want. You
Tom Finegan
2012/12/06 22:59:02
We want 2, but it's the browser (ContentDecryptorD
dmichael (off chromium)
2012/12/07 22:53:35
Well, it doesn't really matter whether you pass a
| |
| 1023 return true; | 1027 return true; |
| 1024 } | 1028 } |
| 1025 | 1029 |
| 1026 void ContentDecryptorDelegate::FreeBuffer(uint32_t buffer_id) { | 1030 void ContentDecryptorDelegate::FreeBuffer(uint32_t buffer_id) { |
| 1027 if (buffer_id) | 1031 if (buffer_id) |
| 1028 free_buffers_.push(buffer_id); | 1032 free_buffers_.push(buffer_id); |
| 1029 } | 1033 } |
| 1030 | 1034 |
| 1031 void ContentDecryptorDelegate::SetBufferToFreeInTrackingInfo( | 1035 void ContentDecryptorDelegate::SetBufferToFreeInTrackingInfo( |
| 1032 PP_DecryptTrackingInfo* tracking_info) { | 1036 PP_DecryptTrackingInfo* tracking_info) { |
| 1033 DCHECK_EQ(tracking_info->buffer_id, 0u); | 1037 DCHECK_EQ(tracking_info->buffer_id, 0u); |
| 1034 | 1038 |
| 1035 if (free_buffers_.empty()) | 1039 if (free_buffers_.empty()) |
| 1036 return; | 1040 return; |
| 1037 | 1041 |
| 1038 tracking_info->buffer_id = free_buffers_.front(); | 1042 tracking_info->buffer_id = free_buffers_.front(); |
| 1039 free_buffers_.pop(); | 1043 free_buffers_.pop(); |
| 1040 } | 1044 } |
| 1041 | 1045 |
| 1042 } // namespace ppapi | 1046 } // namespace ppapi |
| 1043 } // namespace webkit | 1047 } // namespace webkit |
| OLD | NEW |