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

Unified Diff: media/muxers/webm_muxer.cc

Issue 2612403002: Release video frames earlier in MediaRecorder (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: media/muxers/webm_muxer.cc
diff --git a/media/muxers/webm_muxer.cc b/media/muxers/webm_muxer.cc
index 9a4819a4ff68ec600f5a70116a694095a9fe02c5..490b174ef990d67ea70373814f9ab41a50fef79f 100644
--- a/media/muxers/webm_muxer.cc
+++ b/media/muxers/webm_muxer.cc
@@ -12,7 +12,6 @@
#include "media/base/limits.h"
#include "media/base/video_frame.h"
#include "media/filters/opus_constants.h"
-#include "ui/gfx/geometry/size.h"
namespace media {
@@ -57,14 +56,12 @@ void WriteOpusHeader(const media::AudioParameters& params, uint8_t* header) {
}
}
-static double GetFrameRate(const scoped_refptr<VideoFrame>& video_frame) {
+static double GetFrameRate(const WebmMuxer::VideoParameters& params) {
const double kZeroFrameRate = 0.0;
const double kDefaultFrameRate = 30.0;
- double frame_rate = kDefaultFrameRate;
- if (!video_frame->metadata()->GetDouble(VideoFrameMetadata::FRAME_RATE,
- &frame_rate) ||
- frame_rate <= kZeroFrameRate ||
+ double frame_rate = params.frame_rate;
+ if (frame_rate <= kZeroFrameRate ||
frame_rate > media::limits::kMaxFramesPerSecond) {
frame_rate = kDefaultFrameRate;
}
@@ -89,6 +86,16 @@ static const char* MkvCodeIcForMediaVideoCodecId(VideoCodec video_codec) {
} // anonymous namespace
+WebmMuxer::VideoParameters::VideoParameters(
+ scoped_refptr<media::VideoFrame> frame) {
+ frame_size = frame->visible_rect().size();
+ frame_rate = 0.0;
+ ignore_result(frame->metadata()->GetDouble(VideoFrameMetadata::FRAME_RATE,
+ &frame_rate));
+}
+
+WebmMuxer::VideoParameters::~VideoParameters() {}
+
WebmMuxer::WebmMuxer(VideoCodec codec,
bool has_video,
bool has_audio,
@@ -124,7 +131,7 @@ WebmMuxer::~WebmMuxer() {
segment_.Finalize();
}
-void WebmMuxer::OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame,
+void WebmMuxer::OnEncodedVideo(const VideoParameters& params,
std::unique_ptr<std::string> encoded_data,
base::TimeTicks timestamp,
bool is_key_frame) {
@@ -134,8 +141,7 @@ void WebmMuxer::OnEncodedVideo(const scoped_refptr<VideoFrame>& video_frame,
if (!video_track_index_) {
// |track_index_|, cannot be zero (!), initialize WebmMuxer in that case.
// http://www.matroska.org/technical/specs/index.html#Tracks
- AddVideoTrack(video_frame->visible_rect().size(),
- GetFrameRate(video_frame));
+ AddVideoTrack(params.frame_size, GetFrameRate(params));
if (first_frame_timestamp_video_.is_null())
first_frame_timestamp_video_ = timestamp;
}

Powered by Google App Engine
This is Rietveld 408576698