We don't notify event until "outQueue.size() == kNumOutputBuffers"
crash log:
I/SoftFFmpegVideo( 4196): ffmpeg video port setting change event(352x144)->(352x288).
F/OMXCodec( 4196): frameworks/av/media/libstagefright/OMXCodec.cpp:3285 CHECK(info->mStatus == OWNED_BY_US || info->mStatus == OWNED_BY_NATIVE_WINDOW) failed.
F/libc ( 4196): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 4241 (OMXCallbackDisp)
int sws_flags = SWS_BICUBIC;
mImgConvertCtx = sws_getCachedContext(mImgConvertCtx,
int sws_flags = SWS_BICUBIC;
mImgConvertCtx = sws_getCachedContext(mImgConvertCtx,
- mWidth, mHeight, mCtx->pix_fmt, mWidth, mHeight,
+ mWidth, mHeight, (AVPixelFormat)mFrame->format, mWidth, mHeight,
PIX_FMT_YUV420P, sws_flags, NULL, NULL, NULL);
if (mImgConvertCtx == NULL) {
ALOGE("Cannot initialize the conversion context");
PIX_FMT_YUV420P, sws_flags, NULL, NULL, NULL);
if (mImgConvertCtx == NULL) {
ALOGE("Cannot initialize the conversion context");
if (pts == AV_NOPTS_VALUE) {
pts = 0;
}
if (pts == AV_NOPTS_VALUE) {
pts = 0;
}
- outHeader->nTimeStamp = pts;
+ outHeader->nTimeStamp = pts; //FIXME pts is right???
#if DEBUG_FRM
ALOGV("mFrame pts: %lld", pts);
#if DEBUG_FRM
ALOGV("mFrame pts: %lld", pts);
}
while (((mEOSStatus != INPUT_DATA_AVAILABLE) || !inQueue.empty())
}
while (((mEOSStatus != INPUT_DATA_AVAILABLE) || !inQueue.empty())
- && !outQueue.empty()) {
+ && outQueue.size() == kNumOutputBuffers) {
if (mEOSStatus == INPUT_EOS_SEEN) {
drainAllOutputBuffers();
return;
if (mEOSStatus == INPUT_EOS_SEEN) {
drainAllOutputBuffers();
return;
def->format.video.nStride = def->format.video.nFrameWidth;
def->format.video.nSliceHeight = def->format.video.nFrameHeight;
def->nBufferSize =
def->format.video.nStride = def->format.video.nFrameWidth;
def->format.video.nSliceHeight = def->format.video.nFrameHeight;
def->nBufferSize =
- def->format.video.nFrameWidth * def->format.video.nFrameHeight;
+ (def->format.video.nFrameWidth
+ * def->format.video.nFrameHeight * 3) / 2;
def = &editPortInfo(1)->mDef;
def->format.video.nFrameWidth = mWidth;
def = &editPortInfo(1)->mDef;
def->format.video.nFrameWidth = mWidth;
};
bool mFFmpegAlreadyInited;
};
bool mFFmpegAlreadyInited;
- bool mCodecAlreadyOpened;
+ bool mCodecAlreadyOpened;
bool mPendingFrameAsSettingChanged;
AVCodecContext *mCtx;
struct SwsContext *mImgConvertCtx;
bool mPendingFrameAsSettingChanged;
AVCodecContext *mCtx;
struct SwsContext *mImgConvertCtx;