| Index: webrtc/media/engine/webrtcvideoframe.cc
|
| diff --git a/webrtc/media/engine/webrtcvideoframe.cc b/webrtc/media/engine/webrtcvideoframe.cc
|
| index b7d87a5bded645df9a5d6e233216e73de7ab21a3..9c18235bb67de87291d341a2fbd0c7951a09cf61 100644
|
| --- a/webrtc/media/engine/webrtcvideoframe.cc
|
| +++ b/webrtc/media/engine/webrtcvideoframe.cc
|
| @@ -22,18 +22,24 @@ using webrtc::kVPlane;
|
|
|
| namespace cricket {
|
|
|
| -WebRtcVideoFrame::WebRtcVideoFrame():
|
| - time_stamp_ns_(0),
|
| - rotation_(webrtc::kVideoRotation_0) {}
|
| +WebRtcVideoFrame::WebRtcVideoFrame()
|
| + : timestamp_us_(0), rotation_(webrtc::kVideoRotation_0) {}
|
| +
|
| +WebRtcVideoFrame::WebRtcVideoFrame(
|
| + const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer,
|
| + webrtc::VideoRotation rotation,
|
| + int64_t timestamp_us)
|
| + : video_frame_buffer_(buffer),
|
| + timestamp_us_(timestamp_us),
|
| + rotation_(rotation) {}
|
|
|
| WebRtcVideoFrame::WebRtcVideoFrame(
|
| const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer,
|
| int64_t time_stamp_ns,
|
| webrtc::VideoRotation rotation)
|
| - : video_frame_buffer_(buffer),
|
| - time_stamp_ns_(time_stamp_ns),
|
| - rotation_(rotation) {
|
| -}
|
| + : WebRtcVideoFrame(buffer,
|
| + rotation,
|
| + time_stamp_ns / rtc::kNumNanosecsPerMicrosec) {}
|
|
|
| WebRtcVideoFrame::~WebRtcVideoFrame() {}
|
|
|
| @@ -47,7 +53,7 @@ bool WebRtcVideoFrame::Init(uint32_t format,
|
| int64_t time_stamp_ns,
|
| webrtc::VideoRotation rotation) {
|
| return Reset(format, w, h, dw, dh, sample, sample_size,
|
| - time_stamp_ns, rotation,
|
| + time_stamp_ns / rtc::kNumNanosecsPerMicrosec, rotation,
|
| true /*apply_rotation*/);
|
| }
|
|
|
| @@ -55,7 +61,7 @@ bool WebRtcVideoFrame::Init(const CapturedFrame* frame, int dw, int dh,
|
| bool apply_rotation) {
|
| return Reset(frame->fourcc, frame->width, frame->height, dw, dh,
|
| static_cast<uint8_t*>(frame->data), frame->data_size,
|
| - frame->time_stamp,
|
| + frame->time_stamp / rtc::kNumNanosecsPerMicrosec,
|
| frame->rotation, apply_rotation);
|
| }
|
|
|
| @@ -126,9 +132,7 @@ WebRtcVideoFrame::video_frame_buffer() const {
|
| }
|
|
|
| VideoFrame* WebRtcVideoFrame::Copy() const {
|
| - WebRtcVideoFrame* new_frame = new WebRtcVideoFrame(
|
| - video_frame_buffer_, time_stamp_ns_, rotation_);
|
| - return new_frame;
|
| + return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_);
|
| }
|
|
|
| size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc,
|
| @@ -147,7 +151,7 @@ bool WebRtcVideoFrame::Reset(uint32_t format,
|
| int dh,
|
| uint8_t* sample,
|
| size_t sample_size,
|
| - int64_t time_stamp_ns,
|
| + int64_t timestamp_us,
|
| webrtc::VideoRotation rotation,
|
| bool apply_rotation) {
|
| if (!Validate(format, w, h, sample, sample_size)) {
|
| @@ -166,8 +170,7 @@ bool WebRtcVideoFrame::Reset(uint32_t format,
|
| new_height = dw;
|
| }
|
|
|
| - InitToEmptyBuffer(new_width, new_height,
|
| - time_stamp_ns);
|
| + InitToEmptyBuffer(new_width, new_height);
|
| rotation_ = apply_rotation ? webrtc::kVideoRotation_0 : rotation;
|
|
|
| int horiz_crop = ((w - dw) / 2) & ~1;
|
| @@ -192,21 +195,27 @@ bool WebRtcVideoFrame::Reset(uint32_t format,
|
| << " return code : " << r;
|
| return false;
|
| }
|
| + timestamp_us_ = timestamp_us;
|
| return true;
|
| }
|
|
|
| -VideoFrame* WebRtcVideoFrame::CreateEmptyFrame(
|
| - int w, int h,
|
| - int64_t time_stamp_ns) const {
|
| +VideoFrame* WebRtcVideoFrame::CreateEmptyFrame(int w,
|
| + int h,
|
| + int64_t timestamp_us) const {
|
| WebRtcVideoFrame* frame = new WebRtcVideoFrame();
|
| - frame->InitToEmptyBuffer(w, h, time_stamp_ns);
|
| + frame->InitToEmptyBuffer(w, h, rtc::kNumNanosecsPerMicrosec * timestamp_us);
|
| return frame;
|
| }
|
|
|
| +void WebRtcVideoFrame::InitToEmptyBuffer(int w, int h) {
|
| + video_frame_buffer_ = new rtc::RefCountedObject<webrtc::I420Buffer>(w, h);
|
| + rotation_ = webrtc::kVideoRotation_0;
|
| +}
|
| +
|
| void WebRtcVideoFrame::InitToEmptyBuffer(int w, int h,
|
| int64_t time_stamp_ns) {
|
| video_frame_buffer_ = new rtc::RefCountedObject<webrtc::I420Buffer>(w, h);
|
| - time_stamp_ns_ = time_stamp_ns;
|
| + SetTimeStamp(time_stamp_ns);
|
| rotation_ = webrtc::kVideoRotation_0;
|
| }
|
|
|
| @@ -237,8 +246,8 @@ const VideoFrame* WebRtcVideoFrame::GetCopyWithRotationApplied() const {
|
| rotated_height = orig_width;
|
| }
|
|
|
| - rotated_frame_.reset(CreateEmptyFrame(rotated_width, rotated_height,
|
| - GetTimeStamp()));
|
| + rotated_frame_.reset(
|
| + CreateEmptyFrame(rotated_width, rotated_height, timestamp_us_));
|
|
|
| // TODO(guoweis): Add a function in webrtc_libyuv.cc to convert from
|
| // VideoRotation to libyuv::RotationMode.
|
|
|