Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "base/logging.h" |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 6 | #include "services/media/framework/packet.h" |
Dale Sather | ad2cbf2 | 2016-02-10 17:00:57 -0800 | [diff] [blame] | 7 | #include "services/media/framework/payload_allocator.h" |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 8 | |
| 9 | namespace mojo { |
| 10 | namespace media { |
| 11 | |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 12 | Packet::Packet(int64_t pts, bool end_of_stream, size_t size, void* payload) |
| 13 | : pts_(pts), end_of_stream_(end_of_stream), size_(size), payload_(payload) { |
Dale Sather | 103f68e | 2016-03-21 17:07:19 -0700 | [diff] [blame] | 14 | DCHECK((size == 0) == (payload == nullptr)); |
| 15 | } |
| 16 | |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 17 | class PacketImpl : public Packet { |
| 18 | public: |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 19 | PacketImpl(int64_t pts, |
| 20 | bool end_of_stream, |
| 21 | size_t size, |
| 22 | void* payload, |
| 23 | PayloadAllocator* allocator) |
| 24 | : Packet(pts, end_of_stream, size, payload), allocator_(allocator) {} |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 25 | |
| 26 | protected: |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 27 | ~PacketImpl() override{}; |
Dale Sather | 103f68e | 2016-03-21 17:07:19 -0700 | [diff] [blame] | 28 | |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 29 | void Release() override { |
Dale Sather | 103f68e | 2016-03-21 17:07:19 -0700 | [diff] [blame] | 30 | // In the default implementation, payload() will be nullptr if and only if |
| 31 | // allocator_ is nullptr. Subclasses have the option of having a non-null |
| 32 | // payload() and handling deallocation themselves, so allocator_ can be |
| 33 | // nullptr even when payload() is not. |
| 34 | if (payload() != nullptr && allocator_ != nullptr) { |
Dale Sather | eee3400 | 2016-06-20 10:47:59 -0700 | [diff] [blame] | 35 | allocator_->ReleasePayloadBuffer(payload()); |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 36 | } |
| 37 | delete this; |
| 38 | } |
| 39 | |
| 40 | private: |
Dale Sather | ad2cbf2 | 2016-02-10 17:00:57 -0800 | [diff] [blame] | 41 | PayloadAllocator* allocator_; |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 42 | }; |
| 43 | |
| 44 | // static |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 45 | PacketPtr Packet::Create(int64_t pts, |
| 46 | bool end_of_stream, |
| 47 | size_t size, |
| 48 | void* payload, |
| 49 | PayloadAllocator* allocator) { |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 50 | DCHECK(payload == nullptr || allocator != nullptr); |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 51 | return PacketPtr( |
| 52 | new PacketImpl(pts, end_of_stream, size, payload, allocator)); |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | // static |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 56 | PacketPtr Packet::CreateNoAllocator(int64_t pts, |
| 57 | bool end_of_stream, |
| 58 | size_t size, |
| 59 | void* payload) { |
| 60 | return PacketPtr(new PacketImpl(pts, end_of_stream, size, payload, nullptr)); |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | // static |
Dale Sather | 103f68e | 2016-03-21 17:07:19 -0700 | [diff] [blame] | 64 | PacketPtr Packet::CreateEndOfStream(int64_t pts) { |
Dale Sather | 4ccdd21 | 2016-03-23 09:27:19 -0700 | [diff] [blame] | 65 | return PacketPtr(new PacketImpl(pts, |
| 66 | true, // end_of_stream |
| 67 | 0, // size |
| 68 | nullptr, // payload |
| 69 | nullptr)); // allocator |
Dale Sather | bd2a17d | 2016-02-02 16:15:14 -0800 | [diff] [blame] | 70 | } |
| 71 | |
| 72 | } // namespace media |
| 73 | } // namespace mojo |