Merge "Make sure the encoder instance is safely release()'d before its" into klp-dev
diff --git a/cmds/screenrecord/screenrecord.cpp b/cmds/screenrecord/screenrecord.cpp
index 94c626a..68289a5 100644
--- a/cmds/screenrecord/screenrecord.cpp
+++ b/cmds/screenrecord/screenrecord.cpp
@@ -159,6 +159,9 @@
err = codec->configure(format, NULL, NULL,
MediaCodec::CONFIGURE_FLAG_ENCODE);
if (err != NO_ERROR) {
+ codec->release();
+ codec.clear();
+
fprintf(stderr, "ERROR: unable to configure codec (err=%d)\n", err);
return err;
}
@@ -167,6 +170,9 @@
sp<IGraphicBufferProducer> bufferProducer;
err = codec->createInputSurface(&bufferProducer);
if (err != NO_ERROR) {
+ codec->release();
+ codec.clear();
+
fprintf(stderr,
"ERROR: unable to create encoder input surface (err=%d)\n", err);
return err;
@@ -175,6 +181,9 @@
ALOGV("Starting codec");
err = codec->start();
if (err != NO_ERROR) {
+ codec->release();
+ codec.clear();
+
fprintf(stderr, "ERROR: unable to start codec (err=%d)\n", err);
return err;
}
@@ -453,6 +462,7 @@
sp<MediaCodec> encoder;
sp<IGraphicBufferProducer> bufferProducer;
err = prepareEncoder(mainDpyInfo.fps, &encoder, &bufferProducer);
+
if (err != NO_ERROR && !gSizeSpecified) {
if (gVideoWidth != kFallbackWidth && gVideoHeight != kFallbackHeight) {
ALOGV("Retrying with 720p");
@@ -470,7 +480,12 @@
// Configure virtual display.
sp<IBinder> dpy;
err = prepareVirtualDisplay(mainDpyInfo, bufferProducer, &dpy);
- if (err != NO_ERROR) return err;
+ if (err != NO_ERROR) {
+ encoder->release();
+ encoder.clear();
+
+ return err;
+ }
// Configure, but do not start, muxer.
sp<MediaMuxer> muxer = new MediaMuxer(fileName,
@@ -481,7 +496,12 @@
// Main encoder loop.
err = runEncoder(encoder, muxer);
- if (err != NO_ERROR) return err;
+ if (err != NO_ERROR) {
+ encoder->release();
+ encoder.clear();
+
+ return err;
+ }
if (gVerbose) {
printf("Stopping encoder and muxer\n");