codec2: fix codec2 cmd line tool
Test: adb shell codec2 /sdcard/a.mp4
Change-Id: I8128ee3979c00fb6d62fa3933f26d9b875865f5b
diff --git a/media/libstagefright/codecs/avcdec/C2SoftAvcDec.cpp b/media/libstagefright/codecs/avcdec/C2SoftAvcDec.cpp
index 01d120e..9d7b6f8 100644
--- a/media/libstagefright/codecs/avcdec/C2SoftAvcDec.cpp
+++ b/media/libstagefright/codecs/avcdec/C2SoftAvcDec.cpp
@@ -875,7 +875,6 @@
ALOGE("Error in create: 0x%x",
s_create_op.s_ivd_create_op_t.u4_error_code);
deInitDecoder();
- mCodecCtx = NULL;
return UNKNOWN_ERROR;
}
}
@@ -914,6 +913,7 @@
s_delete_op.s_ivd_delete_op_t.u4_error_code);
return UNKNOWN_ERROR;
}
+ mCodecCtx = NULL;
}
mChangingResolution = false;
diff --git a/media/libstagefright/codecs/cmds/codec2.cpp b/media/libstagefright/codecs/cmds/codec2.cpp
index 5a225f1..5917944 100644
--- a/media/libstagefright/codecs/cmds/codec2.cpp
+++ b/media/libstagefright/codecs/cmds/codec2.cpp
@@ -174,6 +174,7 @@
void SimplePlayer::onWorkDone(
std::weak_ptr<C2Component> component, std::vector<std::unique_ptr<C2Work>> workItems) {
+ ALOGV("SimplePlayer::onWorkDone");
(void) component;
ULock l(mProcessedLock);
for (auto & item : workItems) {
@@ -245,31 +246,34 @@
}
int slot;
sp<Fence> fence;
+ ALOGV("Render: Frame #%" PRId64, work->worklets.front()->output.ordinal.frame_index);
const std::shared_ptr<C2Buffer> &output = work->worklets.front()->output.buffers[0];
- const C2ConstGraphicBlock &block = output->data().graphicBlocks().front();
- sp<GraphicBuffer> buffer(new GraphicBuffer(
- block.handle(),
- GraphicBuffer::CLONE_HANDLE,
- block.width(),
- block.height(),
- HAL_PIXEL_FORMAT_YV12,
- 1,
- (uint64_t)GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
- block.width()));
+ if (output) {
+ const C2ConstGraphicBlock &block = output->data().graphicBlocks().front();
+ sp<GraphicBuffer> buffer(new GraphicBuffer(
+ block.handle(),
+ GraphicBuffer::CLONE_HANDLE,
+ block.width(),
+ block.height(),
+ HAL_PIXEL_FORMAT_YV12,
+ 1,
+ (uint64_t)GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
+ block.width()));
- status_t err = igbp->attachBuffer(&slot, buffer);
+ status_t err = igbp->attachBuffer(&slot, buffer);
- IGraphicBufferProducer::QueueBufferInput qbi(
- work->worklets.front()->output.ordinal.timestamp * 1000ll,
- false,
- HAL_DATASPACE_UNKNOWN,
- Rect(block.width(), block.height()),
- NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW,
- 0,
- Fence::NO_FENCE,
- 0);
- IGraphicBufferProducer::QueueBufferOutput qbo;
- err = igbp->queueBuffer(slot, qbi, &qbo);
+ IGraphicBufferProducer::QueueBufferInput qbi(
+ work->worklets.front()->output.ordinal.timestamp * 1000ll,
+ false,
+ HAL_DATASPACE_UNKNOWN,
+ Rect(block.width(), block.height()),
+ NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW,
+ 0,
+ Fence::NO_FENCE,
+ 0);
+ IGraphicBufferProducer::QueueBufferOutput qbo;
+ err = igbp->queueBuffer(slot, qbi, &qbo);
+ }
work->input.buffers.clear();
work->worklets.clear();
@@ -278,6 +282,7 @@
mWorkQueue.push_back(std::move(work));
mQueueCondition.notify_all();
}
+ ALOGV("render loop finished");
});
long numFrames = 0;
@@ -365,11 +370,12 @@
++numFrames;
}
+ ALOGV("main loop finished");
source->stop();
- component->release();
-
running.store(false);
surfaceThread.join();
+
+ component->release();
printf("\n");
}