Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b4146ba authored by Ram Mohan M's avatar Ram Mohan M Committed by android-build-merger
Browse files

bug fix: handle OMX_EventBufferFlag events

am: c8df8940

Change-Id: I4f29647546d22b981c6c7c356d910b3ef0ced038
parents e893a9fc c8df8940
Loading
Loading
Loading
Loading
+37 −18
Original line number Original line Diff line number Diff line
@@ -474,15 +474,20 @@ void GetURLForComponent(AudioDecHidlTest::standardComp comp, char* mURL,


// port settings reconfiguration during runtime. reconfigures sample rate and
// port settings reconfiguration during runtime. reconfigures sample rate and
// number
// number
typedef struct {
    OMX_AUDIO_CODINGTYPE eEncoding;
    AudioDecHidlTest::standardComp comp;
} packedArgs;
void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                         android::Vector<BufferInfo>* iBuffer,
                         android::Vector<BufferInfo>* iBuffer,
                         android::Vector<BufferInfo>* oBuffer,
                         android::Vector<BufferInfo>* oBuffer,
                         OMX_AUDIO_CODINGTYPE eEncoding,
                         OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                         OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                         Message msg,
                         Message msg, PortMode oPortMode, void* args) {
                         AudioDecHidlTest::standardComp comp =
                             AudioDecHidlTest::standardComp::unknown_comp) {
    android::hardware::media::omx::V1_0::Status status;
    android::hardware::media::omx::V1_0::Status status;
    packedArgs* audioArgs = static_cast<packedArgs*>(args);
    OMX_AUDIO_CODINGTYPE eEncoding = audioArgs->eEncoding;
    AudioDecHidlTest::standardComp comp = audioArgs->comp;
    (void)oPortMode;


    if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
    if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
        ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
        ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
@@ -568,7 +573,8 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                            android::Vector<BufferInfo>* iBuffer,
                            android::Vector<BufferInfo>* iBuffer,
                            android::Vector<BufferInfo>* oBuffer,
                            android::Vector<BufferInfo>* oBuffer,
                            OMX_AUDIO_CODINGTYPE eEncoding,
                            OMX_AUDIO_CODINGTYPE eEncoding,
                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput) {
                            OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                            AudioDecHidlTest::standardComp comp) {
    android::hardware::media::omx::V1_0::Status status;
    android::hardware::media::omx::V1_0::Status status;
    Message msg;
    Message msg;
    int timeOut = TIMEOUT_COUNTER;
    int timeOut = TIMEOUT_COUNTER;
@@ -579,8 +585,10 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
        if (status == android::hardware::media::omx::V1_0::Status::OK) {
        if (status == android::hardware::media::omx::V1_0::Status::OK) {
            EXPECT_EQ(msg.type, Message::Type::EVENT);
            EXPECT_EQ(msg.type, Message::Type::EVENT);
            portReconfiguration(omxNode, observer, iBuffer, oBuffer, eEncoding,
            packedArgs audioArgs = {eEncoding, comp};
                                kPortIndexInput, kPortIndexOutput, msg);
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
                                kPortIndexInput, kPortIndexOutput, msg,
                                PortMode::PRESET_BYTE_BUFFER, &audioArgs);
        }
        }
        // status == TIMED_OUT, it could be due to process time being large
        // status == TIMED_OUT, it could be due to process time being large
        // than DEFAULT_TIMEOUT or component needs output buffers to start
        // than DEFAULT_TIMEOUT or component needs output buffers to start
@@ -644,8 +652,10 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
        // Port Reconfiguration
        // Port Reconfiguration
        if (status == android::hardware::media::omx::V1_0::Status::OK &&
        if (status == android::hardware::media::omx::V1_0::Status::OK &&
            msg.type == Message::Type::EVENT) {
            msg.type == Message::Type::EVENT) {
            portReconfiguration(omxNode, observer, iBuffer, oBuffer, eEncoding,
            packedArgs audioArgs = {eEncoding, comp};
                                kPortIndexInput, kPortIndexOutput, msg, comp);
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
                                kPortIndexInput, kPortIndexOutput, msg,
                                PortMode::PRESET_BYTE_BUFFER, &audioArgs);
        }
        }


        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
@@ -789,8 +799,10 @@ TEST_F(AudioDecHidlTest, DecodeTest) {
                  (int)Info.size(), compName);
                  (int)Info.size(), compName);
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                           kPortIndexInput, kPortIndexOutput);
                           kPortIndexInput, kPortIndexOutput, compName);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
    packedArgs audioArgs = {eEncoding, compName};
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs);
    EXPECT_EQ(timestampUslist.empty(), true);
    EXPECT_EQ(timestampUslist.empty(), true);
    // set state to idle
    // set state to idle
    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -846,7 +858,9 @@ TEST_F(AudioDecHidlTest, DISABLED_EOSTest_M) {
    changeStateIdletoExecute(omxNode, observer);
    changeStateIdletoExecute(omxNode, observer);


    // request EOS at the start
    // request EOS at the start
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag);
    packedArgs audioArgs = {eEncoding, compName};
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 0U);
    EXPECT_GE(framesReceived, 0U);
@@ -933,8 +947,10 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) {
                  compName);
                  compName);
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                           kPortIndexInput, kPortIndexOutput);
                           kPortIndexInput, kPortIndexOutput, compName);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag);
    packedArgs audioArgs = {eEncoding, compName};
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 1U);
    EXPECT_GE(framesReceived, 1U);
@@ -949,8 +965,9 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) {
                  compName, false);
                  compName, false);
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                           kPortIndexInput, kPortIndexOutput);
                           kPortIndexInput, kPortIndexOutput, compName);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 1U);
    EXPECT_GE(framesReceived, 1U);
@@ -1034,8 +1051,10 @@ TEST_F(AudioDecHidlTest, SimpleEOSTest) {
                  (int)Info.size(), compName, false);
                  (int)Info.size(), compName, false);
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding,
                           kPortIndexInput, kPortIndexOutput);
                           kPortIndexInput, kPortIndexOutput, compName);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag);
    packedArgs audioArgs = {eEncoding, compName};
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    framesReceived = 0;
    framesReceived = 0;
+11 −4
Original line number Original line Diff line number Diff line
@@ -406,7 +406,8 @@ void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
             android::Vector<BufferInfo>* iBuffer,
             android::Vector<BufferInfo>* iBuffer,
             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
             bool& eosFlag, PortMode* portMode) {
             bool& eosFlag, PortMode* portMode, portreconfig fptr,
             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput, void* args) {
    android::hardware::media::omx::V1_0::Status status;
    android::hardware::media::omx::V1_0::Status status;
    PortMode defaultPortMode[2], *pm;
    PortMode defaultPortMode[2], *pm;


@@ -443,9 +444,15 @@ void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
        status =
        status =
            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
            observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
        if (status == android::hardware::media::omx::V1_0::Status::OK) {
        if (status == android::hardware::media::omx::V1_0::Status::OK) {
            if (msg.data.eventData.event == OMX_EventBufferFlag) {
            if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
                // soft omx components donot send this, we will just ignore it
                if (fptr) {
                // for now
                    (*fptr)(omxNode, observer, iBuffer, oBuffer,
                            kPortIndexInput, kPortIndexOutput, msg, pm[1],
                            args);
                } else {
                    // something unexpected happened
                    EXPECT_TRUE(false);
                }
            } else {
            } else {
                // something unexpected happened
                // something unexpected happened
                EXPECT_TRUE(false);
                EXPECT_TRUE(false);
+14 −1
Original line number Original line Diff line number Diff line
@@ -113,6 +113,12 @@ struct CodecObserver : public IOmxObserver {
                    android::hardware::media::omx::V1_0::Message::Type::EVENT) {
                    android::hardware::media::omx::V1_0::Message::Type::EVENT) {
                    *msg = *it;
                    *msg = *it;
                    msgQueue.erase(it);
                    msgQueue.erase(it);
                    // OMX_EventBufferFlag event is sent when the component has
                    // processed a buffer with its EOS flag set. This event is
                    // not sent by soft omx components. Vendor components can
                    // send this. From IOMX point of view, we will ignore this
                    // event.
                    if (msg->data.eventData.event == OMX_EventBufferFlag) break;
                    return ::android::hardware::media::omx::V1_0::Status::OK;
                    return ::android::hardware::media::omx::V1_0::Status::OK;
                } else if (it->type == android::hardware::media::omx::V1_0::
                } else if (it->type == android::hardware::media::omx::V1_0::
                                           Message::Type::FILL_BUFFER_DONE) {
                                           Message::Type::FILL_BUFFER_DONE) {
@@ -299,9 +305,16 @@ void flushPorts(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
                android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);
                OMX_U32 kPortIndexOutput, int64_t timeoutUs = DEFAULT_TIMEOUT);


typedef void (*portreconfig)(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* oBuffer,
                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                             Message msg, PortMode oPortMode, void* args);
void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
             android::Vector<BufferInfo>* iBuffer,
             android::Vector<BufferInfo>* iBuffer,
             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
             android::Vector<BufferInfo>* oBuffer, bool signalEOS,
             bool& eosFlag, PortMode* portMode = nullptr);
             bool& eosFlag, PortMode* portMode = nullptr,
             portreconfig fptr = nullptr, OMX_U32 kPortIndexInput = 0,
             OMX_U32 kPortIndexOutput = 1, void* args = nullptr);


#endif  // MEDIA_HIDL_TEST_COMMON_H
#endif  // MEDIA_HIDL_TEST_COMMON_H
+14 −11
Original line number Original line Diff line number Diff line
@@ -474,8 +474,9 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                         android::Vector<BufferInfo>* iBuffer,
                         android::Vector<BufferInfo>* iBuffer,
                         android::Vector<BufferInfo>* oBuffer,
                         android::Vector<BufferInfo>* oBuffer,
                         OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                         OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
                         Message msg, PortMode oPortMode) {
                         Message msg, PortMode oPortMode, void* args) {
    android::hardware::media::omx::V1_0::Status status;
    android::hardware::media::omx::V1_0::Status status;
    (void)args;


    if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
    if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
        ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
        ASSERT_EQ(msg.data.eventData.data1, kPortIndexOutput);
@@ -575,9 +576,6 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
        std::cout << "[          ] Warning ! OMX_EventError/ "
        std::cout << "[          ] Warning ! OMX_EventError/ "
                     "Decode Frame Call might be failed \n";
                     "Decode Frame Call might be failed \n";
        return;
        return;
    } else if (msg.data.eventData.event == OMX_EventBufferFlag) {
        // soft omx components donot send this, we will just ignore it
        // for now
    } else {
    } else {
        // something unexpected happened
        // something unexpected happened
        ASSERT_TRUE(false);
        ASSERT_TRUE(false);
@@ -602,7 +600,7 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
            EXPECT_EQ(msg.type, Message::Type::EVENT);
            EXPECT_EQ(msg.type, Message::Type::EVENT);
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
                                kPortIndexInput, kPortIndexOutput, msg,
                                kPortIndexInput, kPortIndexOutput, msg,
                                oPortMode);
                                oPortMode, nullptr);
        }
        }
        // status == TIMED_OUT, it could be due to process time being large
        // status == TIMED_OUT, it could be due to process time being large
        // than DEFAULT_TIMEOUT or component needs output buffers to start
        // than DEFAULT_TIMEOUT or component needs output buffers to start
@@ -668,7 +666,7 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
            msg.type == Message::Type::EVENT) {
            msg.type == Message::Type::EVENT) {
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
            portReconfiguration(omxNode, observer, iBuffer, oBuffer,
                                kPortIndexInput, kPortIndexOutput, msg,
                                kPortIndexInput, kPortIndexOutput, msg,
                                oPortMode);
                                oPortMode, nullptr);
        }
        }


        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
        if (frameID == (int)Info->size() || frameID == (offset + range)) break;
@@ -834,7 +832,8 @@ TEST_F(VideoDecHidlTest, DecodeTest) {
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
    EXPECT_EQ(timestampUslist.empty(), true);
    EXPECT_EQ(timestampUslist.empty(), true);
    // set state to idle
    // set state to idle
    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
    changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
@@ -884,7 +883,8 @@ TEST_F(VideoDecHidlTest, EOSTest_M) {
    changeStateIdletoExecute(omxNode, observer);
    changeStateIdletoExecute(omxNode, observer);


    // request EOS at the start
    // request EOS at the start
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 0U);
    EXPECT_GE(framesReceived, 0U);
@@ -968,7 +968,8 @@ TEST_F(VideoDecHidlTest, ThumbnailTest) {
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 1U);
    EXPECT_GE(framesReceived, 1U);
@@ -983,7 +984,8 @@ TEST_F(VideoDecHidlTest, ThumbnailTest) {
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    EXPECT_GE(framesReceived, 1U);
    EXPECT_GE(framesReceived, 1U);
@@ -1066,7 +1068,8 @@ TEST_F(VideoDecHidlTest, SimpleEOSTest) {
    eleStream.close();
    eleStream.close();
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
    waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
                           kPortIndexInput, kPortIndexOutput, portMode[1]);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode);
    testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode,
            portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
    flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
               kPortIndexOutput);
               kPortIndexOutput);
    framesReceived = 0;
    framesReceived = 0;