• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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/big_endian.h"
6 #include "base/debug/trace_event.h"
7 #include "media/cast/logging/logging_impl.h"
8 
9 namespace media {
10 namespace cast {
11 
12 // TODO(imcheng): Collapse LoggingRaw onto LoggingImpl.
LoggingImpl()13 LoggingImpl::LoggingImpl() {
14   // LoggingImpl can be constructed on any thread, but its methods should all be
15   // called on the same thread.
16   thread_checker_.DetachFromThread();
17 }
18 
~LoggingImpl()19 LoggingImpl::~LoggingImpl() {}
20 
InsertFrameEvent(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,uint32 rtp_timestamp,uint32 frame_id)21 void LoggingImpl::InsertFrameEvent(const base::TimeTicks& time_of_event,
22                                    CastLoggingEvent event,
23                                    EventMediaType event_media_type,
24                                    uint32 rtp_timestamp,
25                                    uint32 frame_id) {
26   DCHECK(thread_checker_.CalledOnValidThread());
27   raw_.InsertFrameEvent(time_of_event, event, event_media_type,
28       rtp_timestamp, frame_id);
29 }
30 
InsertEncodedFrameEvent(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,uint32 rtp_timestamp,uint32 frame_id,int frame_size,bool key_frame,int target_bitrate)31 void LoggingImpl::InsertEncodedFrameEvent(const base::TimeTicks& time_of_event,
32                                           CastLoggingEvent event,
33                                           EventMediaType event_media_type,
34                                           uint32 rtp_timestamp,
35                                           uint32 frame_id, int frame_size,
36                                           bool key_frame,
37                                           int target_bitrate) {
38   DCHECK(thread_checker_.CalledOnValidThread());
39   raw_.InsertEncodedFrameEvent(time_of_event, event, event_media_type,
40       rtp_timestamp, frame_id, frame_size, key_frame, target_bitrate);
41 }
42 
InsertFrameEventWithDelay(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,uint32 rtp_timestamp,uint32 frame_id,base::TimeDelta delay)43 void LoggingImpl::InsertFrameEventWithDelay(
44     const base::TimeTicks& time_of_event, CastLoggingEvent event,
45     EventMediaType event_media_type, uint32 rtp_timestamp, uint32 frame_id,
46     base::TimeDelta delay) {
47   DCHECK(thread_checker_.CalledOnValidThread());
48   raw_.InsertFrameEventWithDelay(time_of_event, event, event_media_type,
49       rtp_timestamp, frame_id, delay);
50 }
51 
InsertSinglePacketEvent(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,const Packet & packet)52 void LoggingImpl::InsertSinglePacketEvent(const base::TimeTicks& time_of_event,
53                                           CastLoggingEvent event,
54                                           EventMediaType event_media_type,
55                                           const Packet& packet) {
56   DCHECK(thread_checker_.CalledOnValidThread());
57 
58   // Parse basic properties.
59   uint32 rtp_timestamp;
60   uint16 packet_id, max_packet_id;
61   const uint8* packet_data = &packet[0];
62   base::BigEndianReader big_endian_reader(
63       reinterpret_cast<const char*>(packet_data + 4), 4);
64   big_endian_reader.ReadU32(&rtp_timestamp);
65   base::BigEndianReader cast_big_endian_reader(
66       reinterpret_cast<const char*>(packet_data + 12 + 2), 4);
67   cast_big_endian_reader.ReadU16(&packet_id);
68   cast_big_endian_reader.ReadU16(&max_packet_id);
69 
70   // rtp_timestamp is enough - no need for frame_id as well.
71   InsertPacketEvent(time_of_event,
72                     event,
73                     event_media_type,
74                     rtp_timestamp,
75                     kFrameIdUnknown,
76                     packet_id,
77                     max_packet_id,
78                     packet.size());
79 }
80 
InsertPacketListEvent(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,const PacketList & packets)81 void LoggingImpl::InsertPacketListEvent(const base::TimeTicks& time_of_event,
82                                         CastLoggingEvent event,
83                                         EventMediaType event_media_type,
84                                         const PacketList& packets) {
85   DCHECK(thread_checker_.CalledOnValidThread());
86   for (PacketList::const_iterator it = packets.begin(); it != packets.end();
87        ++it) {
88     InsertSinglePacketEvent(time_of_event, event, event_media_type,
89         (*it)->data);
90   }
91 }
92 
InsertPacketEvent(const base::TimeTicks & time_of_event,CastLoggingEvent event,EventMediaType event_media_type,uint32 rtp_timestamp,uint32 frame_id,uint16 packet_id,uint16 max_packet_id,size_t size)93 void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event,
94                                     CastLoggingEvent event,
95                                     EventMediaType event_media_type,
96                                     uint32 rtp_timestamp, uint32 frame_id,
97                                     uint16 packet_id, uint16 max_packet_id,
98                                     size_t size) {
99   DCHECK(thread_checker_.CalledOnValidThread());
100   raw_.InsertPacketEvent(time_of_event, event, event_media_type,
101       rtp_timestamp, frame_id, packet_id, max_packet_id, size);
102 }
103 
AddRawEventSubscriber(RawEventSubscriber * subscriber)104 void LoggingImpl::AddRawEventSubscriber(RawEventSubscriber* subscriber) {
105   DCHECK(thread_checker_.CalledOnValidThread());
106   raw_.AddSubscriber(subscriber);
107 }
108 
RemoveRawEventSubscriber(RawEventSubscriber * subscriber)109 void LoggingImpl::RemoveRawEventSubscriber(RawEventSubscriber* subscriber) {
110   DCHECK(thread_checker_.CalledOnValidThread());
111   raw_.RemoveSubscriber(subscriber);
112 }
113 
114 }  // namespace cast
115 }  // namespace media
116