나는 stagefright videoencoder를 사용하여 android 4.4에서 비디오를 인코딩합니다. 내가 전화했을 때무언가에 대한 stagefright 코덱 입력 형식
sp<AMessage> format = new AMessage;
format->setInt32("width", 1080);
format->setInt32("height", 1920);
format->setString("mime", "video/avc");
format->setInt32("color-format", OMX_COLOR_FormatYUV420Planar);
format->setInt32("bitrate", 1000000);
format->setFloat("frame-rate", 25);
format->setInt32("i-frame-interval", 5);
sp<MediaCodec> videoEncoder = MediaCodec::CreateByType(looper, "video/avc", true);
videoEncoder->configure(format, NULL, NULL,MediaCodec::CONFIGURE_FLAG_ENCODE);
videoEncoder->start();
하지만 :
status_t err = gSpVideoEncoder->dequeueOutputBuffer(&bufIndex, &offset, &size, &ptsUsec, &flags, kTimeout);
내가 가지고 :
err === INFO_FORMAT_CHANGED
다음 단계는 내가 전화 :
sp<AMessage> newFormat;
videoEncoder->getOutputFormat(&newFormat);
uint32_t width = 0, height = 0;
newFormat->findInt32("width", (int32_t *)(&width));
newFormat->findInt32("height", (int32_t *)(&height));
fprintf(stderr, "new width: %d, height: %d\n", width, height)
내가 가지고 결과 :
new width: 1088, height: 1920
videoEncoder에 새로운 입력 프레임 (1088x1920)을 제공해야하는지 혼란 스럽습니까 (1080x1920 아님)?
대단히 감사합니다. ~ _ –
@BingShine .. 해결 방법으로 문제가 해결되면 대답을 수락하십시오. – Ganesh