void AMPEG4AudioAssembler::submitAccessUnit() { CHECK(!mPackets.empty()); #if VERBOSE LOG(VERBOSE) << "Access unit complete (" << mPackets.size() << " packets)"; #endif sp<ABuffer> accessUnit = MakeCompoundFromPackets(mPackets); accessUnit = removeLATMFraming(accessUnit); CopyTimes(accessUnit, *mPackets.begin()); #if 0 printf(mAccessUnitDamaged ? "X" : "."); fflush(stdout); #endif if (mAccessUnitDamaged) { accessUnit->meta()->setInt32("damaged", true); } mPackets.clear(); mAccessUnitDamaged = false; sp<AMessage> msg = mNotifyMsg->dup(); msg->setBuffer("access-unit", accessUnit); msg->post(); }
void AMPEG4AudioAssembler::submitAccessUnit() { CHECK(!mPackets.empty()); #if VERBOSE LOG(VERBOSE) << "Access unit complete (" << mPackets.size() << " packets)"; #endif size_t totalSize = 0; List<sp<ABuffer> >::iterator it = mPackets.begin(); while (it != mPackets.end()) { const sp<ABuffer> &unit = *it; totalSize += unit->size(); ++it; } sp<ABuffer> accessUnit = new ABuffer(totalSize); size_t offset = 0; it = mPackets.begin(); while (it != mPackets.end()) { const sp<ABuffer> &unit = *it; memcpy((uint8_t *)accessUnit->data() + offset, unit->data(), unit->size()); ++it; } accessUnit = removeLATMFraming(accessUnit); CopyTimes(accessUnit, *mPackets.begin()); #if 0 printf(mAccessUnitDamaged ? "X" : "."); fflush(stdout); #endif if (mAccessUnitDamaged) { accessUnit->meta()->setInt32("damaged", true); } mPackets.clear(); mAccessUnitDamaged = false; sp<AMessage> msg = mNotifyMsg->dup(); msg->setObject("access-unit", accessUnit); msg->post(); }