Adding DeliverCaptureEncodedFrame
Review URL: https://webrtc-codereview.appspot.com/860012 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2909 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -209,8 +209,44 @@ WebRtc_Word32 VideoCaptureImpl::CaptureDelay()
|
|||||||
|
|
||||||
WebRtc_Word32 VideoCaptureImpl::DeliverCapturedFrame(VideoFrame& captureFrame,
|
WebRtc_Word32 VideoCaptureImpl::DeliverCapturedFrame(VideoFrame& captureFrame,
|
||||||
WebRtc_Word64 capture_time, VideoCodecType codec_type) {
|
WebRtc_Word64 capture_time, VideoCodecType codec_type) {
|
||||||
UpdateFrameCount();// frame count used for local frame rate callback.
|
UpdateFrameCount(); // frame count used for local frame rate callback.
|
||||||
_startImageFrameIntervall = 0; // prevent the start image to be displayed.
|
_startImageFrameIntervall = 0; // prevent the start image to be displayed.
|
||||||
|
|
||||||
|
const bool callOnCaptureDelayChanged = _setCaptureDelay != _captureDelay;
|
||||||
|
// Capture delay changed
|
||||||
|
if (_setCaptureDelay != _captureDelay) {
|
||||||
|
_setCaptureDelay = _captureDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the capture time
|
||||||
|
if (capture_time != 0) {
|
||||||
|
captureFrame.SetRenderTime(capture_time);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
captureFrame.SetRenderTime(TickTime::MillisecondTimestamp());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (captureFrame.RenderTimeMs() == last_capture_time_) {
|
||||||
|
// We don't allow the same capture time for two frames, drop this one.
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
last_capture_time_ = captureFrame.RenderTimeMs();
|
||||||
|
|
||||||
|
if (_dataCallBack) {
|
||||||
|
if (callOnCaptureDelayChanged) {
|
||||||
|
_dataCallBack->OnCaptureDelayChanged(_id, _captureDelay);
|
||||||
|
}
|
||||||
|
_dataCallBack->OnIncomingCapturedFrame(_id, captureFrame, codec_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebRtc_Word32 VideoCaptureImpl::DeliverEncodedCapturedFrame(
|
||||||
|
VideoFrame& captureFrame, WebRtc_Word64 capture_time,
|
||||||
|
VideoCodecType codec_type) {
|
||||||
|
UpdateFrameCount(); // frame count used for local frame rate callback.
|
||||||
|
_startImageFrameIntervall = 0; // prevent the start image to be displayed.
|
||||||
|
|
||||||
const bool callOnCaptureDelayChanged = _setCaptureDelay != _captureDelay;
|
const bool callOnCaptureDelayChanged = _setCaptureDelay != _captureDelay;
|
||||||
// Capture delay changed
|
// Capture delay changed
|
||||||
@@ -306,18 +342,20 @@ WebRtc_Word32 VideoCaptureImpl::IncomingFrame(
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_captureFrame.SetLength(requiredLength);
|
_captureFrame.SetLength(requiredLength);
|
||||||
|
DeliverCapturedFrame(_captureFrame, captureTime, frameInfo.codecType);
|
||||||
}
|
}
|
||||||
else // Encoded format
|
else // Encoded format
|
||||||
{
|
{
|
||||||
if (_captureFrame.CopyFrame(videoFrameLength, videoFrame) != 0)
|
if (_capture_encoded_frame.CopyFrame(videoFrameLength, videoFrame) != 0)
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
|
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
|
||||||
"Failed to copy captured frame of length %d", (int) videoFrameLength);
|
"Failed to copy captured frame of length %d",
|
||||||
|
static_cast<int>(videoFrameLength));
|
||||||
}
|
}
|
||||||
|
DeliverEncodedCapturedFrame(_capture_encoded_frame, captureTime,
|
||||||
|
frameInfo.codecType);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeliverCapturedFrame(_captureFrame, captureTime, frameInfo.codecType);
|
|
||||||
|
|
||||||
|
|
||||||
const WebRtc_UWord32 processTime =
|
const WebRtc_UWord32 processTime =
|
||||||
(WebRtc_UWord32)(TickTime::Now() - startProcessTime).Milliseconds();
|
(WebRtc_UWord32)(TickTime::Now() - startProcessTime).Milliseconds();
|
||||||
|
@@ -104,6 +104,9 @@ protected:
|
|||||||
WebRtc_Word32 DeliverCapturedFrame(
|
WebRtc_Word32 DeliverCapturedFrame(
|
||||||
VideoFrame& captureFrame,
|
VideoFrame& captureFrame,
|
||||||
WebRtc_Word64 capture_time, VideoCodecType codec_type);
|
WebRtc_Word64 capture_time, VideoCodecType codec_type);
|
||||||
|
WebRtc_Word32 DeliverEncodedCapturedFrame(
|
||||||
|
VideoFrame& captureFrame,
|
||||||
|
WebRtc_Word64 capture_time, VideoCodecType codec_type);
|
||||||
|
|
||||||
WebRtc_Word32 _id; // Module ID
|
WebRtc_Word32 _id; // Module ID
|
||||||
char* _deviceUniqueId; // current Device unique name;
|
char* _deviceUniqueId; // current Device unique name;
|
||||||
@@ -134,6 +137,7 @@ private:
|
|||||||
VideoRotationMode _rotateFrame; //Set if the frame should be rotated by the capture module.
|
VideoRotationMode _rotateFrame; //Set if the frame should be rotated by the capture module.
|
||||||
|
|
||||||
VideoFrame _captureFrame;
|
VideoFrame _captureFrame;
|
||||||
|
VideoFrame _capture_encoded_frame;
|
||||||
|
|
||||||
// Used to make sure incoming timestamp is increasing for every frame.
|
// Used to make sure incoming timestamp is increasing for every frame.
|
||||||
WebRtc_Word64 last_capture_time_;
|
WebRtc_Word64 last_capture_time_;
|
||||||
|
Reference in New Issue
Block a user