Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: services/media/framework/packet.cc

Issue 1814553002: Motown: Improvements to packet definition (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Added a comment. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « services/media/framework/packet.h ('k') | services/media/framework/parts/lpcm_reformatter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 "base/logging.h" 5 #include "base/logging.h"
6 #include "services/media/framework/packet.h" 6 #include "services/media/framework/packet.h"
7 #include "services/media/framework/payload_allocator.h" 7 #include "services/media/framework/payload_allocator.h"
8 8
9 namespace mojo { 9 namespace mojo {
10 namespace media { 10 namespace media {
11 11
12 Packet::Packet(
13 int64_t pts,
14 bool end_of_stream,
15 size_t size,
16 void* payload) :
17 pts_(pts),
18 end_of_stream_(end_of_stream),
19 size_(size),
20 payload_(payload) {
21 DCHECK((size == 0) == (payload == nullptr));
22 }
23
12 class PacketImpl : public Packet { 24 class PacketImpl : public Packet {
13 public: 25 public:
14 PacketImpl( 26 PacketImpl(
15 int64_t presentation_time, 27 int64_t pts,
16 uint64_t duration,
17 bool end_of_stream, 28 bool end_of_stream,
18 size_t size, 29 size_t size,
19 void* payload, 30 void* payload,
20 PayloadAllocator* allocator) : 31 PayloadAllocator* allocator) :
21 presentation_time_(presentation_time), 32 Packet(pts, end_of_stream, size, payload),
22 duration_(duration), 33 allocator_(allocator) {}
23 end_of_stream_(end_of_stream),
24 size_(size),
25 payload_(payload),
26 allocator_(allocator) {
27 DCHECK((size == 0) == (payload == nullptr));
28 }
29 34
35 protected:
30 ~PacketImpl() override {}; 36 ~PacketImpl() override {};
31 37
32 int64_t presentation_time() const override { return presentation_time_; }
33
34 uint64_t duration() const override { return duration_; }
35
36 bool end_of_stream() const override { return end_of_stream_; }
37
38 size_t size() const override { return size_; }
39
40 void* payload() const override { return payload_; }
41
42 protected:
43 void Release() override { 38 void Release() override {
44 if (payload_ != nullptr && allocator_ != nullptr) { 39 // In the default implementation, payload() will be nullptr if and only if
45 DCHECK(allocator_); 40 // allocator_ is nullptr. Subclasses have the option of having a non-null
46 allocator_->ReleasePayloadBuffer(size_, payload_); 41 // payload() and handling deallocation themselves, so allocator_ can be
42 // nullptr even when payload() is not.
43 if (payload() != nullptr && allocator_ != nullptr) {
44 allocator_->ReleasePayloadBuffer(size(), payload());
47 } 45 }
48 delete this; 46 delete this;
49 } 47 }
50 48
51 private: 49 private:
52 int64_t presentation_time_;
53 uint64_t duration_;
54 bool end_of_stream_;
55 size_t size_;
56 void* payload_;
57 PayloadAllocator* allocator_; 50 PayloadAllocator* allocator_;
58 }; 51 };
59 52
60 // static 53 // static
61 PacketPtr Packet::Create( 54 PacketPtr Packet::Create(
62 int64_t presentation_time, 55 int64_t pts,
63 uint64_t duration,
64 bool end_of_stream, 56 bool end_of_stream,
65 size_t size, 57 size_t size,
66 void* payload, 58 void* payload,
67 PayloadAllocator* allocator) { 59 PayloadAllocator* allocator) {
68 DCHECK(payload == nullptr || allocator != nullptr); 60 DCHECK(payload == nullptr || allocator != nullptr);
69 return PacketPtr(new PacketImpl( 61 return PacketPtr(new PacketImpl(
70 presentation_time, 62 pts,
71 duration,
72 end_of_stream, 63 end_of_stream,
73 size, 64 size,
74 payload, 65 payload,
75 allocator)); 66 allocator));
76 } 67 }
77 68
78 // static 69 // static
79 PacketPtr Packet::CreateNoAllocator( 70 PacketPtr Packet::CreateNoAllocator(
80 int64_t presentation_time, 71 int64_t pts,
81 uint64_t duration,
82 bool end_of_stream, 72 bool end_of_stream,
83 size_t size, 73 size_t size,
84 void* payload) { 74 void* payload) {
85 return PacketPtr(new PacketImpl( 75 return PacketPtr(new PacketImpl(
86 presentation_time, 76 pts,
87 duration,
88 end_of_stream, 77 end_of_stream,
89 size, 78 size,
90 payload, 79 payload,
91 nullptr)); 80 nullptr));
92 } 81 }
93 82
94 // static 83 // static
95 PacketPtr Packet::CreateEndOfStream(int64_t presentation_time) { 84 PacketPtr Packet::CreateEndOfStream(int64_t pts) {
96 return PacketPtr(new PacketImpl( 85 return PacketPtr(new PacketImpl(
97 presentation_time, 86 pts,
98 0, // duration
99 true, // end_of_stream 87 true, // end_of_stream
100 0, // size 88 0, // size
101 nullptr, // payload 89 nullptr, // payload
102 nullptr)); // allocator 90 nullptr)); // allocator
103 } 91 }
104 92
105 } // namespace media 93 } // namespace media
106 } // namespace mojo 94 } // namespace mojo
OLDNEW
« no previous file with comments | « services/media/framework/packet.h ('k') | services/media/framework/parts/lpcm_reformatter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698