Index: media/cast/sender/h264_vt_encoder.cc |
diff --git a/media/cast/sender/h264_vt_encoder.cc b/media/cast/sender/h264_vt_encoder.cc |
index 346f96fa1d40473e48483238e961014141867153..b5eabeba2756107701182de4dd0642e52f9db8b6 100644 |
--- a/media/cast/sender/h264_vt_encoder.cc |
+++ b/media/cast/sender/h264_vt_encoder.cc |
@@ -13,6 +13,7 @@ |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/power_monitor/power_monitor.h" |
#include "base/synchronization/lock.h" |
#include "media/base/mac/corevideo_glue.h" |
#include "media/base/mac/video_frame_mac.h" |
@@ -333,10 +334,23 @@ H264VideoToolboxEncoder::H264VideoToolboxEncoder( |
scoped_refptr<VideoFrameFactoryImpl>(new VideoFrameFactoryImpl( |
weak_factory_.GetWeakPtr(), cast_environment_)); |
} |
+ |
+ // Register for power state changes. |
+ auto power_monitor = base::PowerMonitor::Get(); |
+ if (power_monitor) { |
+ power_monitor->AddObserver(this); |
+ VLOG(1) << "Registered for power state changes."; |
+ } else { |
+ DLOG(WARNING) << "No power monitor. Encoder may fail if power state change " |
+ "goes undetected."; |
+ } |
} |
H264VideoToolboxEncoder::~H264VideoToolboxEncoder() { |
DestroyCompressionSession(); |
+ auto power_monitor = base::PowerMonitor::Get(); |
+ if (power_monitor) |
+ power_monitor->RemoveObserver(this); |
} |
void H264VideoToolboxEncoder::ResetCompressionSession() { |
@@ -609,6 +623,18 @@ void H264VideoToolboxEncoder::EmitFrames() { |
} |
} |
+void H264VideoToolboxEncoder::OnSuspend() { |
+ VLOG(1) |
+ << "OnSuspend: Emitting all frames and destroying compression session."; |
+ EmitFrames(); |
+ DestroyCompressionSession(); |
+} |
+ |
+void H264VideoToolboxEncoder::OnResume() { |
+ VLOG(1) << "OnResume: Resetting compression session."; |
+ ResetCompressionSession(); |
miu
2015/04/22 18:18:47
I just realized: You shouldn't call ResetCompressi
jfroy
2015/04/22 18:24:36
Thanks for pointing this out. I'll update the code
|
+} |
+ |
bool H264VideoToolboxEncoder::SetSessionProperty(CFStringRef key, |
int32_t value) { |
base::ScopedCFTypeRef<CFNumberRef> cfvalue( |