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 |