OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/renderer/pepper/pepper_video_source_host.h" | 5 #include "content/renderer/pepper/pepper_video_source_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/numerics/safe_conversions.h" | 8 #include "base/numerics/safe_conversions.h" |
9 #include "content/public/renderer/renderer_ppapi_host.h" | 9 #include "content/public/renderer/renderer_ppapi_host.h" |
10 #include "content/renderer/pepper/ppb_image_data_impl.h" | 10 #include "content/renderer/pepper/ppb_image_data_impl.h" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 const int vert_crop = frame->visible_rect().y(); | 175 const int vert_crop = frame->visible_rect().y(); |
176 | 176 |
177 const uint8* src_y = frame->data(media::VideoFrame::kYPlane) + | 177 const uint8* src_y = frame->data(media::VideoFrame::kYPlane) + |
178 (src_width * vert_crop + horiz_crop); | 178 (src_width * vert_crop + horiz_crop); |
179 const int center = (src_width + 1) / 2; | 179 const int center = (src_width + 1) / 2; |
180 const uint8* src_u = frame->data(media::VideoFrame::kUPlane) + | 180 const uint8* src_u = frame->data(media::VideoFrame::kUPlane) + |
181 (center * vert_crop + horiz_crop) / 2; | 181 (center * vert_crop + horiz_crop) / 2; |
182 const uint8* src_v = frame->data(media::VideoFrame::kVPlane) + | 182 const uint8* src_v = frame->data(media::VideoFrame::kVPlane) + |
183 (center * vert_crop + horiz_crop) / 2; | 183 (center * vert_crop + horiz_crop) / 2; |
184 | 184 |
185 libyuv::I420ToBGRA(src_y, | 185 libyuv::I420ToARGB(src_y, |
186 frame->stride(media::VideoFrame::kYPlane), | 186 frame->stride(media::VideoFrame::kYPlane), |
187 src_u, | 187 src_u, |
188 frame->stride(media::VideoFrame::kUPlane), | 188 frame->stride(media::VideoFrame::kUPlane), |
189 src_v, | 189 src_v, |
190 frame->stride(media::VideoFrame::kVPlane), | 190 frame->stride(media::VideoFrame::kVPlane), |
191 bitmap_pixels, | 191 bitmap_pixels, |
192 bitmap->rowBytes(), | 192 bitmap->rowBytes(), |
193 dst_width, | 193 dst_width, |
194 dst_height); | 194 dst_height); |
| 195 // Give an imperceptible hint about endianness in the first pixel. The alpha |
| 196 // channel is always 255, if B is 255 as well, change it to 254. |
| 197 if (bitmap_pixels[0] == 255) |
| 198 bitmap_pixels[0] = 254; |
195 | 199 |
196 ppapi::HostResource host_resource; | 200 ppapi::HostResource host_resource; |
197 host_resource.SetHostResource(pp_instance(), resource.get()); | 201 host_resource.SetHostResource(pp_instance(), resource.get()); |
198 | 202 |
199 // Convert a video timestamp to a PP_TimeTicks (a double, in seconds). | 203 // Convert a video timestamp to a PP_TimeTicks (a double, in seconds). |
200 PP_TimeTicks timestamp = frame->timestamp().InSecondsF(); | 204 PP_TimeTicks timestamp = frame->timestamp().InSecondsF(); |
201 | 205 |
202 ppapi::proxy::SerializedHandle serialized_handle; | 206 ppapi::proxy::SerializedHandle serialized_handle; |
203 serialized_handle.set_shmem(image_handle, byte_count); | 207 serialized_handle.set_shmem(image_handle, byte_count); |
204 reply_context_.params.AppendHandle(serialized_handle); | 208 reply_context_.params.AppendHandle(serialized_handle); |
(...skipping 19 matching lines...) Expand all Loading... |
224 | 228 |
225 void PepperVideoSourceHost::Close() { | 229 void PepperVideoSourceHost::Close() { |
226 if (source_handler_.get() && !stream_url_.empty()) | 230 if (source_handler_.get() && !stream_url_.empty()) |
227 source_handler_->Close(frame_receiver_.get()); | 231 source_handler_->Close(frame_receiver_.get()); |
228 | 232 |
229 source_handler_.reset(NULL); | 233 source_handler_.reset(NULL); |
230 stream_url_.clear(); | 234 stream_url_.clear(); |
231 } | 235 } |
232 | 236 |
233 } // namespace content | 237 } // namespace content |
OLD | NEW |