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

Side by Side Diff: media/video/ffmpeg_video_decode_engine.cc

Issue 7044008: Initial implementation of stream switching in AdaptiveDemuxer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: _ Created 9 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/video/ffmpeg_video_decode_engine.h" 5 #include "media/video/ffmpeg_video_decode_engine.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/task.h" 9 #include "base/task.h"
10 #include "media/base/buffers.h" 10 #include "media/base/buffers.h"
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 ConvertFromTimeBase(doubled_time_base, 2 + av_frame_->repeat_pict); 296 ConvertFromTimeBase(doubled_time_base, 2 + av_frame_->repeat_pict);
297 297
298 if (!direct_rendering_) { 298 if (!direct_rendering_) {
299 // Available frame is guaranteed, because we issue as much reads as 299 // Available frame is guaranteed, because we issue as much reads as
300 // available frame, except the case of |frame_decoded| == 0, which 300 // available frame, except the case of |frame_decoded| == 0, which
301 // implies decoder order delay, and force us to read more inputs. 301 // implies decoder order delay, and force us to read more inputs.
302 DCHECK(frame_queue_available_.size()); 302 DCHECK(frame_queue_available_.size());
303 video_frame = frame_queue_available_.front(); 303 video_frame = frame_queue_available_.front();
304 frame_queue_available_.pop_front(); 304 frame_queue_available_.pop_front();
305 305
306 if ((video_frame->width() != codec_context_->width) ||
307 (video_frame->height() != codec_context_->height)) {
308
Ami GONE FROM CHROMIUM 2011/05/19 20:27:37 extra newline
acolwell GONE FROM CHROMIUM 2011/05/20 01:26:37 Done.
309 VideoFrame::CreateFrame(VideoFrame::YV12,
310 codec_context_->width,
311 codec_context_->height,
312 kNoTimestamp,
313 kNoTimestamp,
314 &video_frame);
315 }
316
306 // Copy the frame data since FFmpeg reuses internal buffers for AVFrame 317 // Copy the frame data since FFmpeg reuses internal buffers for AVFrame
307 // output, meaning the data is only valid until the next 318 // output, meaning the data is only valid until the next
308 // avcodec_decode_video() call. 319 // avcodec_decode_video() call.
309 size_t height = codec_context_->height; 320 size_t height = codec_context_->height;
310 CopyPlane(VideoFrame::kYPlane, video_frame.get(), av_frame_.get(), height); 321 CopyPlane(VideoFrame::kYPlane, video_frame.get(), av_frame_.get(), height);
311 CopyPlane(VideoFrame::kUPlane, video_frame.get(), av_frame_.get(), height); 322 CopyPlane(VideoFrame::kUPlane, video_frame.get(), av_frame_.get(), height);
312 CopyPlane(VideoFrame::kVPlane, video_frame.get(), av_frame_.get(), height); 323 CopyPlane(VideoFrame::kVPlane, video_frame.get(), av_frame_.get(), height);
313 } else { 324 } else {
314 // Get the VideoFrame from allocator which associate with av_frame_. 325 // Get the VideoFrame from allocator which associate with av_frame_.
315 video_frame = allocator_->DecodeDone(codec_context_, av_frame_.get()); 326 video_frame = allocator_->DecodeDone(codec_context_, av_frame_.get());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 break; 393 break;
383 } 394 }
384 return VideoFrame::INVALID; 395 return VideoFrame::INVALID;
385 } 396 }
386 397
387 } // namespace media 398 } // namespace media
388 399
389 // Disable refcounting for this object because this object only lives 400 // Disable refcounting for this object because this object only lives
390 // on the video decoder thread and there's no need to refcount it. 401 // on the video decoder thread and there's no need to refcount it.
391 DISABLE_RUNNABLE_METHOD_REFCOUNT(media::FFmpegVideoDecodeEngine); 402 DISABLE_RUNNABLE_METHOD_REFCOUNT(media::FFmpegVideoDecodeEngine);
OLDNEW
« media/filters/video_renderer_base.cc ('K') | « media/filters/video_renderer_base.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698