Loading cmds/screenrecord/screenrecord.cpp +22 −11 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaCodecConstants.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaMuxer.h> #include <media/stagefright/PersistentSurface.h> Loading Loading @@ -83,8 +84,6 @@ using android::status_t; using android::DISPLAY_ORIENTATION_0; using android::DISPLAY_ORIENTATION_180; using android::DISPLAY_ORIENTATION_90; using android::INFO_FORMAT_CHANGED; using android::INFO_OUTPUT_BUFFERS_CHANGED; using android::INVALID_OPERATION; using android::NAME_NOT_FOUND; using android::NO_ERROR; Loading Loading @@ -113,6 +112,7 @@ static uint32_t gVideoWidth = 0; // default width+height static uint32_t gVideoHeight = 0; static uint32_t gBitRate = 20000000; // 20Mbps static uint32_t gTimeLimitSec = kMaxTimeLimitSec; static uint32_t gBframes = 0; // Set by signal handler to stop recording. static volatile bool gStopRequested = false; Loading Loading @@ -184,13 +184,18 @@ static status_t prepareEncoder(float displayFps, sp<MediaCodec>* pCodec, } sp<AMessage> format = new AMessage; format->setInt32("width", gVideoWidth); format->setInt32("height", gVideoHeight); format->setString("mime", kMimeTypeAvc); format->setInt32("color-format", OMX_COLOR_FormatAndroidOpaque); format->setInt32("bitrate", gBitRate); format->setFloat("frame-rate", displayFps); format->setInt32("i-frame-interval", 10); format->setInt32(KEY_WIDTH, gVideoWidth); format->setInt32(KEY_HEIGHT, gVideoHeight); format->setString(KEY_MIME, kMimeTypeAvc); format->setInt32(KEY_COLOR_FORMAT, OMX_COLOR_FormatAndroidOpaque); format->setInt32(KEY_BIT_RATE, gBitRate); format->setFloat(KEY_FRAME_RATE, displayFps); format->setInt32(KEY_I_FRAME_INTERVAL, 10); format->setInt32(KEY_MAX_B_FRAMES, gBframes); if (gBframes > 0) { format->setInt32(KEY_PROFILE, AVCProfileMain); format->setInt32(KEY_LEVEL, AVCLevel41); } sp<android::ALooper> looper = new android::ALooper; looper->setName("screenrecord_looper"); Loading Loading @@ -478,7 +483,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, case -EAGAIN: // INFO_TRY_AGAIN_LATER ALOGV("Got -EAGAIN, looping"); break; case INFO_FORMAT_CHANGED: // INFO_OUTPUT_FORMAT_CHANGED case android::INFO_FORMAT_CHANGED: // INFO_OUTPUT_FORMAT_CHANGED { // Format includes CSD, which we must provide to muxer. ALOGV("Encoder format changed"); Loading @@ -495,7 +500,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, } } break; case INFO_OUTPUT_BUFFERS_CHANGED: // INFO_OUTPUT_BUFFERS_CHANGED case android::INFO_OUTPUT_BUFFERS_CHANGED: // INFO_OUTPUT_BUFFERS_CHANGED // Not expected for an encoder; handle it anyway. ALOGV("Encoder buffers changed"); err = encoder->getOutputBuffers(&buffers); Loading Loading @@ -960,6 +965,7 @@ int main(int argc, char* const argv[]) { { "codec-name", required_argument, NULL, 'N' }, { "monotonic-time", no_argument, NULL, 'm' }, { "persistent-surface", no_argument, NULL, 'p' }, { "bframes", required_argument, NULL, 'B' }, { NULL, 0, NULL, 0 } }; Loading Loading @@ -1052,6 +1058,11 @@ int main(int argc, char* const argv[]) { case 'p': gPersistentSurface = true; break; case 'B': if (parseValueWithUnit(optarg, &gBframes) != NO_ERROR) { return 2; } break; default: if (ic != '?') { fprintf(stderr, "getopt_long returned unexpected value 0x%x\n", ic); Loading Loading
cmds/screenrecord/screenrecord.cpp +22 −11 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaCodecConstants.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaMuxer.h> #include <media/stagefright/PersistentSurface.h> Loading Loading @@ -83,8 +84,6 @@ using android::status_t; using android::DISPLAY_ORIENTATION_0; using android::DISPLAY_ORIENTATION_180; using android::DISPLAY_ORIENTATION_90; using android::INFO_FORMAT_CHANGED; using android::INFO_OUTPUT_BUFFERS_CHANGED; using android::INVALID_OPERATION; using android::NAME_NOT_FOUND; using android::NO_ERROR; Loading Loading @@ -113,6 +112,7 @@ static uint32_t gVideoWidth = 0; // default width+height static uint32_t gVideoHeight = 0; static uint32_t gBitRate = 20000000; // 20Mbps static uint32_t gTimeLimitSec = kMaxTimeLimitSec; static uint32_t gBframes = 0; // Set by signal handler to stop recording. static volatile bool gStopRequested = false; Loading Loading @@ -184,13 +184,18 @@ static status_t prepareEncoder(float displayFps, sp<MediaCodec>* pCodec, } sp<AMessage> format = new AMessage; format->setInt32("width", gVideoWidth); format->setInt32("height", gVideoHeight); format->setString("mime", kMimeTypeAvc); format->setInt32("color-format", OMX_COLOR_FormatAndroidOpaque); format->setInt32("bitrate", gBitRate); format->setFloat("frame-rate", displayFps); format->setInt32("i-frame-interval", 10); format->setInt32(KEY_WIDTH, gVideoWidth); format->setInt32(KEY_HEIGHT, gVideoHeight); format->setString(KEY_MIME, kMimeTypeAvc); format->setInt32(KEY_COLOR_FORMAT, OMX_COLOR_FormatAndroidOpaque); format->setInt32(KEY_BIT_RATE, gBitRate); format->setFloat(KEY_FRAME_RATE, displayFps); format->setInt32(KEY_I_FRAME_INTERVAL, 10); format->setInt32(KEY_MAX_B_FRAMES, gBframes); if (gBframes > 0) { format->setInt32(KEY_PROFILE, AVCProfileMain); format->setInt32(KEY_LEVEL, AVCLevel41); } sp<android::ALooper> looper = new android::ALooper; looper->setName("screenrecord_looper"); Loading Loading @@ -478,7 +483,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, case -EAGAIN: // INFO_TRY_AGAIN_LATER ALOGV("Got -EAGAIN, looping"); break; case INFO_FORMAT_CHANGED: // INFO_OUTPUT_FORMAT_CHANGED case android::INFO_FORMAT_CHANGED: // INFO_OUTPUT_FORMAT_CHANGED { // Format includes CSD, which we must provide to muxer. ALOGV("Encoder format changed"); Loading @@ -495,7 +500,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, } } break; case INFO_OUTPUT_BUFFERS_CHANGED: // INFO_OUTPUT_BUFFERS_CHANGED case android::INFO_OUTPUT_BUFFERS_CHANGED: // INFO_OUTPUT_BUFFERS_CHANGED // Not expected for an encoder; handle it anyway. ALOGV("Encoder buffers changed"); err = encoder->getOutputBuffers(&buffers); Loading Loading @@ -960,6 +965,7 @@ int main(int argc, char* const argv[]) { { "codec-name", required_argument, NULL, 'N' }, { "monotonic-time", no_argument, NULL, 'm' }, { "persistent-surface", no_argument, NULL, 'p' }, { "bframes", required_argument, NULL, 'B' }, { NULL, 0, NULL, 0 } }; Loading Loading @@ -1052,6 +1058,11 @@ int main(int argc, char* const argv[]) { case 'p': gPersistentSurface = true; break; case 'B': if (parseValueWithUnit(optarg, &gBframes) != NO_ERROR) { return 2; } break; default: if (ic != '?') { fprintf(stderr, "getopt_long returned unexpected value 0x%x\n", ic); Loading