The PV AVC software decoder expects each fragment of a NAL unit to be handed to the decoder unframed.
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 35d599c..70ab0b5 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -152,7 +152,7 @@
uint32_t quirks = 0;
if (!strcmp(componentName, "OMX.PV.avcdec")) {
- quirks |= kWantsRawNALFrames;
+ quirks |= kWantsNALFragments;
}
if (!strcmp(componentName, "OMX.TI.MP3.decode")) {
quirks |= kNeedsFlushBeforeDisable;
@@ -554,7 +554,7 @@
}
OMXCodec::~OMXCodec() {
- CHECK_EQ(mState, LOADED);
+ CHECK(mState == LOADED || mState == ERROR);
status_t err = mOMX->observe_node(mNode, NULL);
CHECK_EQ(err, OK);
@@ -1149,8 +1149,8 @@
size_t size = specific->mSize;
- if (!strcasecmp(mMIME, "video/avc")
- && !(mQuirks & kWantsRawNALFrames)) {
+ if (!strcasecmp("video/avc", mMIME)
+ && !(mQuirks & kWantsNALFragments)) {
static const uint8_t kNALStartCode[4] =
{ 0x00, 0x00, 0x00, 0x01 };
@@ -1462,8 +1462,8 @@
}
sp<MetaData> params = new MetaData;
- if (!strcasecmp(mMIME, "video/avc") && !(mQuirks & kWantsRawNALFrames)) {
- params->setInt32(kKeyNeedsNALFraming, true);
+ if (mQuirks & kWantsNALFragments) {
+ params->setInt32(kKeyWantsNALFragments, true);
}
status_t err = mSource->start(params.get());