Skip to content

Feature/aff on vff#515

Open
balasaraswathy-n wants to merge 7 commits into
masterfrom
feature/aff_on_vff
Open

Feature/aff on vff#515
balasaraswathy-n wants to merge 7 commits into
masterfrom
feature/aff_on_vff

Conversation

@balasaraswathy-n
Copy link
Copy Markdown

No description provided.

Copilot AI review requested due to automatic review settings June 1, 2026 16:42
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

Pull request must be merged with a description containing the required fields,

Summary:
Type: Feature/Fix/Cleanup
Test Plan:
Jira:

If there is no jira releated to this change, please put 'Jira: NO-JIRA'.

Description can be changed by editing the top comment on your pull request and making a new commit.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces end-to-end “first frame received” notifications (including audio first-frame support) by wiring GStreamer first-frame signals (and an audio-sink probe fallback) through gstplayer task scheduling, server forwarding, IPC transport, and client callbacks, with accompanying unit/component test coverage.

Changes:

  • Add first-frame detection during element setup (video signal + audio signal / audio-sink probe fallback) and schedule first-frame tasks.
  • Propagate first-frame events through server internals, IPC (FirstFrameReceivedEvent), and client callbacks (notifyFirstFrameReceived).
  • Add/extend unit and component tests to validate first-frame notifications and non-regressions.

Reviewed changes

Copilot reviewed 63 out of 63 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/unittests/media/server/mocks/gstplayer/GstGenericPlayerPrivateMock.h Extends gstplayer private mock API for first-frame/probe lifecycle hooks.
tests/unittests/media/server/mocks/gstplayer/GstGenericPlayerClientMock.h Adds client mock notification for first-frame received.
tests/unittests/media/server/mocks/gstplayer/GenericPlayerTaskFactoryMock.h Adds task-factory mock for FirstFrameReceived task creation.
tests/unittests/media/server/main/mediaPipeline/CallbackTest.cpp Adds server callback forwarding tests for first-frame received.
tests/unittests/media/server/ipc/mediaPipelineModuleService/MediaPipelineModuleServiceTestsFixture.h Adds fixture helpers for first-frame IPC event testing.
tests/unittests/media/server/ipc/mediaPipelineModuleService/MediaPipelineModuleServiceTestsFixture.cpp Adds matcher/helpers and send path for FirstFrameReceivedEvent.
tests/unittests/media/server/ipc/mediaPipelineModuleService/MediaPipelineModuleServiceTests.cpp Adds module-service test for first-frame event emission.
tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/SetupElementTest.cpp Adds unit tests for first-video/audio-frame signal hookup.
tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp Adds unit test coverage for createFirstFrameReceived.
tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/FirstFrameReceivedTest.cpp New unit tests for FirstFrameReceived task execution behavior.
tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerPrivateTest.cpp Adds tests for scheduling first video/audio frame tasks.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h Extends shared test context with first-frame callbacks.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h Adds helper methods for first-frame signal/probe testing flows.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp Implements first-frame signal hookup expectations + trigger helpers.
tests/unittests/media/server/gstplayer/CMakeLists.txt Adds FirstFrameReceived unit test to build.
tests/unittests/media/client/mocks/ipc/MediaPipelineIpcClientMock.h Adds IPC client mock callback for first-frame received.
tests/unittests/media/client/main/mediaPipeline/CallbackTest.cpp Adds client callback forwarding test for first-frame received.
tests/unittests/media/client/ipc/mediaPipelineIpc/CallbackTest.cpp Adds IPC callback test handling FirstFrameReceivedEvent.
tests/unittests/media/client/ipc/mediaPipelineIpc/base/MediaPipelineIpcTestBase.h Adds event tag/callback slot for FirstFrameReceivedEvent.
tests/unittests/media/client/ipc/mediaPipelineIpc/base/MediaPipelineIpcTestBase.cpp Adds subscribe/unsubscribe expectations for FirstFrameReceivedEvent.
tests/componenttests/server/tests/mediaPipeline/UnderflowTest.cpp Updates expectations impacted by additional signal-list/free calls.
tests/componenttests/server/tests/mediaPipeline/FirstFrameNotificationTest.cpp New server component tests for first video/audio frame IPC emission.
tests/componenttests/server/tests/CMakeLists.txt Adds new server component test to build.
tests/componenttests/server/stubs/ClientStub.cpp Subscribes client stub to FirstFrameReceivedEvent.
tests/componenttests/client/tests/mse/FirstFrameNotificationTest.cpp New client component test validating first-frame callbacks for A/V.
tests/componenttests/client/tests/base/MediaPipelineTestMethods.h Adds helper methods for first-frame event expectations/sends.
tests/componenttests/client/tests/base/MediaPipelineTestMethods.cpp Implements first-frame expectation + event send helpers.
tests/componenttests/client/stubs/MediaPipelineModuleStub.h Adds stub method to send FirstFrameReceivedEvent.
tests/componenttests/client/stubs/MediaPipelineModuleStub.cpp Implements stub event construction and send for FirstFrameReceivedEvent.
tests/componenttests/client/CMakeLists.txt Adds new client component test to build.
tests/common/publicClientMocks/MediaPipelineClientMock.h Adds first-frame callback to public client mock.
proto/mediapipelinemodule.proto Adds FirstFrameReceivedEvent protobuf message definition.
openspec/changes/audio-first-frame/tasks.md New openspec task checklist for audio first-frame change.
openspec/changes/audio-first-frame/specs/audio-first-frame/spec.md New openspec requirements spec for audio first-frame.
openspec/changes/audio-first-frame/proposal.md New openspec proposal describing rationale and scope.
openspec/changes/audio-first-frame/design.md New openspec design doc for detection/probe/guard decisions.
openspec/changes/audio-first-frame/.openspec.yaml New openspec metadata for the change.
media/server/main/source/MediaPipelineServerInternal.cpp Adds server internal forwarding for first-frame received by source type.
media/server/main/include/MediaPipelineServerInternal.h Declares notifyFirstFrameReceived on server internal interface.
media/server/ipc/source/MediaPipelineClient.cpp Sends FirstFrameReceivedEvent over IPC.
media/server/ipc/include/MediaPipelineClient.h Declares notifyFirstFrameReceived on IPC client interface.
media/server/gstplayer/source/Utils.cpp Adds first-frame signal lookup utility (video + audio signal names).
media/server/gstplayer/source/tasks/generic/Stop.cpp Clears audio first-frame guard/probe state on stop.
media/server/gstplayer/source/tasks/generic/SetupElement.cpp Connects first-frame callbacks and installs audio sink-pad probe fallback.
media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp Adds task creation for FirstFrameReceived.
media/server/gstplayer/source/tasks/generic/FirstFrameReceived.cpp New task that notifies client of first-frame received per source type.
media/server/gstplayer/source/tasks/generic/AttachSource.cpp Resets audio first-frame guard on attach/reattach.
media/server/gstplayer/source/GstGenericPlayer.cpp Adds scheduling APIs and audio probe lifecycle management + guard state.
media/server/gstplayer/interface/IGstGenericPlayerClient.h Adds gstplayer client callback notifyFirstFrameReceived(MediaSourceType).
media/server/gstplayer/include/Utils.h Declares getFirstFrameSignalName utility.
media/server/gstplayer/include/tasks/IGenericPlayerTaskFactory.h Declares createFirstFrameReceived factory method.
media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h Declares override for createFirstFrameReceived.
media/server/gstplayer/include/tasks/generic/FirstFrameReceived.h New header for FirstFrameReceived task.
media/server/gstplayer/include/IGstGenericPlayerPrivate.h Extends private interface for first-frame scheduling + probe management.
media/server/gstplayer/include/GstGenericPlayer.h Adds new IGstGenericPlayerPrivate method implementations.
media/server/gstplayer/include/GenericPlayerContext.h Adds audio first-frame guard + probe state to context.
media/server/gstplayer/CMakeLists.txt Builds new FirstFrameReceived task source.
media/public/include/IMediaPipelineClient.h Adds public client callback notifyFirstFrameReceived(sourceId).
media/client/main/source/MediaPipeline.cpp Forwards first-frame received callback to application client.
media/client/main/include/MediaPipeline.h Declares notifyFirstFrameReceived on MediaPipeline IPC client implementation.
media/client/ipc/source/MediaPipelineIpc.cpp Subscribes to FirstFrameReceivedEvent and forwards to IPC client.
media/client/ipc/interface/IMediaPipelineIpcClient.h Adds IPC client callback notifyFirstFrameReceived(sourceId).
media/client/ipc/include/MediaPipelineIpc.h Declares onFirstFrameReceived handler.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread media/server/gstplayer/source/GstGenericPlayer.cpp Outdated
Comment on lines +1687 to +1700
void GstGenericPlayer::scheduleFirstAudioFrameReceived()
{
if (m_context.firstAudioFrameReceived)
{
return;
}

m_context.firstAudioFrameReceived = true;

if (m_workerThread)
{
m_workerThread->enqueueTask(m_taskFactory->createFirstFrameReceived(m_context, *this, MediaSourceType::AUDIO));
}
}
Comment on lines +44 to +47
#### Scenario: Existing protocol remains unchanged
- **WHEN** audio first-frame support is added
- **THEN** the system continues to use the existing `FirstFrameReceivedEvent` transport shape
- **THEN** no new public callback name or protobuf message is required No newline at end of file
Comment on lines +62 to +63
* Initalise the control state to running for this test application.
* Initalise a audio video media session playing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants