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

Side by Side Diff: media/gpu/v4l2_video_decode_accelerator.cc

Issue 2345123002: Attach color space information to hardware decoded NV12 video frames. (Closed)
Patch Set: compile fix Created 4 years, 3 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/gpu/v4l2_video_decode_accelerator.h" 5 #include "media/gpu/v4l2_video_decode_accelerator.h"
6 6
7 #include <dlfcn.h> 7 #include <dlfcn.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <linux/videodev2.h> 10 #include <linux/videodev2.h>
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 base::TimeDelta()); 1223 base::TimeDelta());
1224 // Unretained is safe because |this| owns image processor and there will 1224 // Unretained is safe because |this| owns image processor and there will
1225 // be no callbacks after processor destroys. 1225 // be no callbacks after processor destroys.
1226 image_processor_->Process( 1226 image_processor_->Process(
1227 frame, dqbuf.index, 1227 frame, dqbuf.index,
1228 base::Bind(&V4L2VideoDecodeAccelerator::FrameProcessed, 1228 base::Bind(&V4L2VideoDecodeAccelerator::FrameProcessed,
1229 base::Unretained(this), bitstream_buffer_id)); 1229 base::Unretained(this), bitstream_buffer_id));
1230 } else { 1230 } else {
1231 output_record.state = kAtClient; 1231 output_record.state = kAtClient;
1232 decoder_frames_at_client_++; 1232 decoder_frames_at_client_++;
1233 // TODO(hubbe): Insert correct color space. http://crbug.com/647725
1233 const Picture picture(output_record.picture_id, bitstream_buffer_id, 1234 const Picture picture(output_record.picture_id, bitstream_buffer_id,
1234 gfx::Rect(visible_size_), false); 1235 gfx::Rect(visible_size_), gfx::ColorSpace(),
1236 false);
1235 pending_picture_ready_.push( 1237 pending_picture_ready_.push(
1236 PictureRecord(output_record.cleared, picture)); 1238 PictureRecord(output_record.cleared, picture));
1237 SendPictureReady(); 1239 SendPictureReady();
1238 output_record.cleared = true; 1240 output_record.cleared = true;
1239 } 1241 }
1240 } 1242 }
1241 } 1243 }
1242 1244
1243 NotifyFlushDoneIfNeeded(); 1245 NotifyFlushDoneIfNeeded();
1244 } 1246 }
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
2261 OutputRecord& output_record = output_buffer_map_[output_buffer_index]; 2263 OutputRecord& output_record = output_buffer_map_[output_buffer_index];
2262 DVLOGF(3) << "picture_id=" << output_record.picture_id; 2264 DVLOGF(3) << "picture_id=" << output_record.picture_id;
2263 DCHECK_EQ(output_record.state, kAtProcessor); 2265 DCHECK_EQ(output_record.state, kAtProcessor);
2264 DCHECK_NE(output_record.egl_image, EGL_NO_IMAGE_KHR); 2266 DCHECK_NE(output_record.egl_image, EGL_NO_IMAGE_KHR);
2265 DCHECK_NE(output_record.picture_id, -1); 2267 DCHECK_NE(output_record.picture_id, -1);
2266 2268
2267 // Send the processed frame to render. 2269 // Send the processed frame to render.
2268 output_record.state = kAtClient; 2270 output_record.state = kAtClient;
2269 decoder_frames_at_client_++; 2271 decoder_frames_at_client_++;
2270 image_processor_bitstream_buffer_ids_.pop(); 2272 image_processor_bitstream_buffer_ids_.pop();
2273 // TODO(hubbe): Insert correct color space. http://crbug.com/647725
2271 const Picture picture(output_record.picture_id, bitstream_buffer_id, 2274 const Picture picture(output_record.picture_id, bitstream_buffer_id,
2272 gfx::Rect(visible_size_), false); 2275 gfx::Rect(visible_size_), gfx::ColorSpace(), false);
2273 pending_picture_ready_.push(PictureRecord(output_record.cleared, picture)); 2276 pending_picture_ready_.push(PictureRecord(output_record.cleared, picture));
2274 SendPictureReady(); 2277 SendPictureReady();
2275 output_record.cleared = true; 2278 output_record.cleared = true;
2276 // Flush or resolution change may be waiting image processor to finish. 2279 // Flush or resolution change may be waiting image processor to finish.
2277 if (image_processor_bitstream_buffer_ids_.empty()) { 2280 if (image_processor_bitstream_buffer_ids_.empty()) {
2278 NotifyFlushDoneIfNeeded(); 2281 NotifyFlushDoneIfNeeded();
2279 if (decoder_state_ == kChangingResolution) 2282 if (decoder_state_ == kChangingResolution)
2280 StartResolutionChange(); 2283 StartResolutionChange();
2281 } 2284 }
2282 } 2285 }
2283 2286
2284 void V4L2VideoDecodeAccelerator::ImageProcessorError() { 2287 void V4L2VideoDecodeAccelerator::ImageProcessorError() {
2285 LOGF(ERROR) << "Image processor error"; 2288 LOGF(ERROR) << "Image processor error";
2286 NOTIFY_ERROR(PLATFORM_FAILURE); 2289 NOTIFY_ERROR(PLATFORM_FAILURE);
2287 } 2290 }
2288 2291
2289 } // namespace media 2292 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698