2 * Copyright (c) 1999-2000, Eric Moon.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions, and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions, and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 // EndPointInfoView.cpp
34 #include "EndPointInfoView.h"
36 #include "InfoWindowManager.h"
38 #include "MediaIcon.h"
39 #include "MediaString.h"
41 __USE_CORTEX_NAMESPACE
44 #define D_METHOD(x) //PRINT (x)
46 // -------------------------------------------------------- //
47 // *** ctor/dtor (public)
48 // -------------------------------------------------------- //
50 EndPointInfoView::EndPointInfoView(
51 const media_input
&input
)
52 : InfoView(input
.name
, "Media input", 0),
54 m_port(input
.destination
.port
),
55 m_id(input
.destination
.id
) {
56 D_METHOD(("EndPointInfoView::EndPointInfoView(input)\n"));
58 setSideBarWidth(be_plain_font
->StringWidth(" Destination ")
59 + 2 * InfoView::M_H_MARGIN
);
62 addField("Source", MediaString::getStringFor(input
.source
));
64 // add "Destination" field
65 addField("Destination", MediaString::getStringFor(input
.destination
));
67 // add a separator field
70 // add "Media Type" field
71 addField("Media type", MediaString::getStringFor(input
.format
.type
));
73 _addFormatFields(input
.format
);
76 EndPointInfoView::EndPointInfoView(
77 const media_output
&output
)
78 : InfoView(output
.name
, "Media output", 0),
80 m_port(output
.source
.port
),
81 m_id(output
.source
.id
) {
82 D_METHOD(("EndPointInfoView::EndPointInfoView(output)\n"));
84 setSideBarWidth(be_plain_font
->StringWidth(" Destination ")
85 + 2 * InfoView::M_H_MARGIN
);
88 addField("Source", MediaString::getStringFor(output
.source
));
90 // add "Destination" field
91 addField("Destination", MediaString::getStringFor(output
.destination
));
93 // add a separator field
96 // add "Media Type" field
97 addField("Media type", MediaString::getStringFor(output
.format
.type
));
99 _addFormatFields(output
.format
);
102 EndPointInfoView::~EndPointInfoView()
104 D_METHOD(("EndPointInfoView::~EndPointInfoView()\n"));
107 // -------------------------------------------------------- //
108 // *** BView implementation (public)
109 // -------------------------------------------------------- //
111 void EndPointInfoView::DetachedFromWindow() {
112 D_METHOD(("EndPointInfoView::DetachedFromWindow()\n"));
114 InfoWindowManager
*manager
= InfoWindowManager::Instance();
117 BMessage
message(InfoWindowManager::M_OUTPUT_WINDOW_CLOSED
);
118 message
.AddInt32("source_port", m_port
);
119 message
.AddInt32("source_id", m_id
);
120 manager
->PostMessage(&message
);
123 BMessage
message(InfoWindowManager::M_INPUT_WINDOW_CLOSED
);
124 message
.AddInt32("destination_port", m_port
);
125 message
.AddInt32("destination_id", m_id
);
126 manager
->PostMessage(&message
);
131 // -------------------------------------------------------- //
132 // *** internal operations (private)
133 // -------------------------------------------------------- //
135 void EndPointInfoView::_addFormatFields(
136 const media_format
&format
)
138 D_METHOD(("EndPointInfoView::_addFormatFields()\n"));
140 switch (format
.type
) {
141 case B_MEDIA_RAW_AUDIO
: {
142 // adjust view properties
143 setSideBarWidth(be_plain_font
->StringWidth(" Sample Rate ") + 2 * InfoView::M_H_MARGIN
);
145 // add "Format" field
146 s
= MediaString::forAudioFormat(format
.u
.raw_audio
.format
,
147 format
.u
.raw_audio
.valid_bits
);
148 addField("Format", s
);
149 // add "Sample Rate" field
150 s
= MediaString::forAudioFrameRate(format
.u
.raw_audio
.frame_rate
);
151 addField("Sample rate", s
);
152 // add "Channels" field
153 s
= MediaString::forAudioChannelCount(format
.u
.raw_audio
.channel_count
);
154 addField("Channels", s
);
155 // add "Channel Mask" field
156 s
= MediaString::forAudioChannelMask(format
.u
.raw_audio
.channel_mask
);
157 addField("Channel mask", s
);
158 // add "Matrix Mask" field
159 s
= MediaString::forAudioMatrixMask(format
.u
.raw_audio
.matrix_mask
);
160 addField("Matrix mask", s
);
161 // add the "Byte Order" field
162 s
= MediaString::forAudioByteOrder(format
.u
.raw_audio
.byte_order
);
163 addField("Byte order", s
);
164 // add the "Buffer Size" field
165 s
= MediaString::forAudioBufferSize(format
.u
.raw_audio
.buffer_size
);
166 addField("Buffer size", s
);
169 case B_MEDIA_RAW_VIDEO
: {
170 // adjust view properties
171 setSideBarWidth(be_plain_font
->StringWidth(" Video Data Between ") + 2 * InfoView::M_H_MARGIN
);
173 // add the "Format" field
174 s
= MediaString::forVideoFormat(format
.u
.raw_video
.display
.format
);
175 addField("Format", s
);
176 // add the "Resolution" field
177 s
= MediaString::forVideoResolution(format
.u
.raw_video
.display
.line_width
,
178 format
.u
.raw_video
.display
.line_count
);
179 addField("Resolution", s
);
180 // add the "Field Rate" field
181 s
= MediaString::forVideoFieldRate(format
.u
.raw_video
.field_rate
,
182 format
.u
.raw_video
.interlace
);
183 addField("Field rate", s
);
184 // add the "Orientation" field
185 s
= MediaString::forVideoOrientation(format
.u
.raw_video
.orientation
);
186 addField("Orientation", s
);
187 // add the "Aspect Ratio" field
188 s
= MediaString::forVideoAspectRatio(format
.u
.raw_video
.pixel_width_aspect
,
189 format
.u
.raw_video
.pixel_height_aspect
);
190 addField("Aspect ratio", s
);
191 // add the "Active Lines" field
192 s
= MediaString::forVideoActiveLines(format
.u
.raw_video
.first_active
,
193 format
.u
.raw_video
.last_active
);
194 addField("Active lines", s
);
195 // add the "Offset" field
196 s
= MediaString::forVideoOffset(format
.u
.raw_video
.display
.pixel_offset
,
197 format
.u
.raw_video
.display
.line_offset
);
198 addField("Offset", s
);
201 case B_MEDIA_ENCODED_AUDIO
: {
202 // adjust view properties
203 setSideBarWidth(be_plain_font
->StringWidth(" Frame Size ") + 2 * InfoView::M_H_MARGIN
);
205 // add the "Bit Rate" field
206 s
= MediaString::forAudioBitRate(format
.u
.encoded_audio
.bit_rate
);
207 addField("Bit rate", s
);
208 // add the "Frame Size" field
209 s
= MediaString::forAudioFrameSize(format
.u
.encoded_audio
.frame_size
);
210 addField("Frame size", s
);
213 case B_MEDIA_ENCODED_VIDEO
: {
214 // adjust view properties
215 setSideBarWidth(be_plain_font
->StringWidth(" Frame Size ") + 2 * InfoView::M_H_MARGIN
);
217 // add the "Bit Rate" field
218 s
= MediaString::forVideoBitRate(format
.u
.encoded_video
.avg_bit_rate
,
219 format
.u
.encoded_video
.max_bit_rate
);
220 addField("Bit rate", s
);
221 // add the "Frame Size" field
222 s
= MediaString::forVideoFrameSize(format
.u
.encoded_video
.frame_size
);
223 addField("Frame size", s
);
224 // add the "History" field
225 s
= MediaString::forVideoHistory(format
.u
.encoded_video
.forward_history
,
226 format
.u
.encoded_video
.backward_history
);
227 addField("History", s
);
230 case B_MEDIA_MULTISTREAM
: {
231 // adjust view properties
232 setSideBarWidth(be_plain_font
->StringWidth(" Chunk Size ") + 2 * InfoView::M_H_MARGIN
);
234 // add the "Format" field
235 s
= MediaString::forMultistreamFormat(format
.u
.multistream
.format
);
236 addField("Format", s
);
237 // add the "Bit Rate" field
238 s
= MediaString::forMultistreamBitRate(format
.u
.multistream
.avg_bit_rate
,
239 format
.u
.multistream
.max_bit_rate
);
240 addField("Bit rate", s
);
241 // add the "Chunk Size" field
242 s
= MediaString::forMultistreamChunkSize(format
.u
.multistream
.avg_chunk_size
,
243 format
.u
.multistream
.max_chunk_size
);
244 addField("Chunk size", s
);
245 // add the "Flags" field
246 s
= MediaString::forMultistreamFlags(format
.u
.multistream
.flags
);
247 addField("Flags", s
);
256 // END -- EndPointInfoView.cpp --