Fix for handling end of stream

 - Fixes handling of end of strem when provided only with
   C2Work and not with C2AccessUnitInfos::input

Change-Id: I0ed5d73f68e91058b4622f118c7ee15afcc66736
diff --git a/media/codec2/hal/common/MultiAccessUnitHelper.cpp b/media/codec2/hal/common/MultiAccessUnitHelper.cpp
index 2473e59..117ce91 100644
--- a/media/codec2/hal/common/MultiAccessUnitHelper.cpp
+++ b/media/codec2/hal/common/MultiAccessUnitHelper.cpp
@@ -277,9 +277,11 @@
                     std::static_pointer_cast<const C2AccessUnitInfos::input>(
                     w->input.buffers.front()->getInfo(C2AccessUnitInfos::input::PARAM_TYPE));
             uint32_t offset = 0; uint32_t multiAUSize = multiAU.front().size();
+            bool sendEos = false;
             for (int idx = 0; idx < auInfo->flexCount(); ++idx) {
                 std::vector<C2ConstLinearBlock> au;
                 const C2AccessUnitInfosStruct &info = auInfo->m.values[idx];
+                sendEos |= (info.flags & C2FrameData::FLAG_END_OF_STREAM);
                 std::unique_ptr<C2Work> newWork = cloneInputWork(w, info.flags);
                 frameSet.insert(newFrameIdx);
                 newFrameIdx = mFrameIndex++;
@@ -302,6 +304,17 @@
                 processedWork->push_back(std::move(sliceWork));
                 offset += info.size;
             }
+            if (!sendEos && (w->input.flags & C2FrameData::FLAG_END_OF_STREAM)) {
+                if (!processedWork->empty()) {
+                    std::list<std::unique_ptr<C2Work>> &sliceWork = processedWork->back();
+                    if (!sliceWork.empty()) {
+                        std::unique_ptr<C2Work> &work = sliceWork.back();
+                        if (work) {
+                            work->input.flags = C2FrameData::FLAG_END_OF_STREAM;
+                        }
+                    }
+                }
+            }
         }
         if (!processedWork->empty()) {
             {