Skip to content

Add first-video-frame-callback signal implementation#497

Open
smudri85 wants to merge 5 commits into
masterfrom
feature/RDKEMW-13397
Open

Add first-video-frame-callback signal implementation#497
smudri85 wants to merge 5 commits into
masterfrom
feature/RDKEMW-13397

Conversation

@smudri85
Copy link
Copy Markdown
Contributor

Summary: Add first-video-frame-callback signal implementation
Type: Fix
Test Plan: UT/CT, Fullstack
Jira: RDKEMW-13397

Copilot AI review requested due to automatic review settings May 11, 2026 07:16
@github-actions
Copy link
Copy Markdown

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 support for a “first video frame received” notification: detecting a first-video-frame-callback GLib signal in the GStreamer pipeline, scheduling a worker task, and propagating the notification over IPC to the public client API.

Changes:

  • Connect to a first-video-frame-callback signal during element setup and schedule a new FirstFrameReceived task when it fires.
  • Add a new FirstFrameReceivedEvent to the IPC/proto layer and propagate it through server/client pipeline components.
  • Update unit/component test scaffolding (mocks, factories, and setup-element tests) to cover the new signal/task creation.

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/unittests/media/server/mocks/gstplayer/GstGenericPlayerPrivateMock.h Adds mock for scheduling the first-frame task.
tests/unittests/media/server/mocks/gstplayer/GstGenericPlayerClientMock.h Adds mock client notification for first frame received.
tests/unittests/media/server/mocks/gstplayer/GenericPlayerTaskFactoryMock.h Adds mock factory method for creating the new task.
tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/SetupElementTest.cpp Adds a unit test exercising first-video-frame callback wiring.
tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp Adds a unit test asserting the new task type is created.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h Stores the first-video-frame callback in test context.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h Adds helpers to set/trigger first-video-frame callback in tests.
tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp Extends expectations to include first-video-frame signal discovery/connection.
tests/unittests/media/client/mocks/ipc/MediaPipelineIpcClientMock.h Adds IPC client mock method for first frame received.
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 Subscribes/unsubscribes to FirstFrameReceivedEvent in test base.
tests/componenttests/server/tests/mediaPipeline/UnderflowTest.cpp Updates expectations due to additional GLib signal enumeration calls.
tests/componenttests/server/stubs/ClientStub.cpp Subscribes component-test client stub to FirstFrameReceivedEvent.
tests/common/publicClientMocks/MediaPipelineClientMock.h Adds public client mock method for first frame received.
proto/mediapipelinemodule.proto Adds new FirstFrameReceivedEvent IPC message.
media/server/main/source/MediaPipelineServerInternal.cpp Implements server-side notifyFirstFrameReceived -> public client call.
media/server/main/include/MediaPipelineServerInternal.h Declares notifyFirstFrameReceived override.
media/server/ipc/source/MediaPipelineClient.cpp Sends FirstFrameReceivedEvent over IPC.
media/server/ipc/include/MediaPipelineClient.h Declares new IMediaPipelineClient notification implementation.
media/server/gstplayer/source/Utils.cpp Adds signal-name discovery helper for first-video-frame-callback.
media/server/gstplayer/source/tasks/generic/SetupElement.cpp Connects first-video-frame callback when signal exists on a video element.
media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp Adds factory creation for FirstFrameReceived task.
media/server/gstplayer/source/tasks/generic/FirstFrameReceived.cpp New worker task that notifies the GstGenericPlayer client.
media/server/gstplayer/source/GstGenericPlayer.cpp Schedules FirstFrameReceived task from signal callback path.
media/server/gstplayer/interface/IGstGenericPlayerClient.h Adds notifyFirstFrameReceived(MediaSourceType) API.
media/server/gstplayer/include/Utils.h Declares getFirstVideoFrameSignalName helper.
media/server/gstplayer/include/tasks/IGenericPlayerTaskFactory.h Adds createFirstFrameReceived factory API.
media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h Declares createFirstFrameReceived in concrete factory.
media/server/gstplayer/include/tasks/generic/FirstFrameReceived.h Declares new FirstFrameReceived task type.
media/server/gstplayer/include/IGstGenericPlayerPrivate.h Adds scheduleFirstVideoFrameReceived() hook.
media/server/gstplayer/include/GstGenericPlayer.h Implements the new scheduling method in GstGenericPlayer.
media/server/gstplayer/CMakeLists.txt Adds FirstFrameReceived.cpp to build.
media/public/include/IMediaPipelineClient.h Extends public client API with notifyFirstFrameReceived(sourceId).
media/client/main/source/MediaPipeline.cpp Forwards first-frame notification to the public client.
media/client/main/include/MediaPipeline.h Declares notifyFirstFrameReceived override.
media/client/ipc/source/MediaPipelineIpc.cpp Subscribes/handles FirstFrameReceivedEvent and forwards to IPC client.
media/client/ipc/interface/IMediaPipelineIpcClient.h Adds IPC client interface method notifyFirstFrameReceived.
media/client/ipc/include/MediaPipelineIpc.h Declares onFirstFrameReceived event handler.

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

Comment thread media/server/gstplayer/source/tasks/generic/SetupElement.cpp Outdated
Comment thread media/server/gstplayer/include/tasks/IGenericPlayerTaskFactory.h Outdated
Comment thread media/client/ipc/source/MediaPipelineIpc.cpp
Copy link
Copy Markdown

@balasaraswathy-n balasaraswathy-n left a comment

Choose a reason for hiding this comment

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

IGstGenericPlayerPrivate &player is not required under FirstFrameReceived.cpp,

@github-actions
Copy link
Copy Markdown

Coverage statistics of your commit:
WARNING: Lines coverage decreased from: 84.3% to 84.1%
WARNING: Functions coverage decreased from: 92.6% to 92.4%

Copilot AI review requested due to automatic review settings May 13, 2026 14:22
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

Copilot reviewed 55 out of 55 changed files in this pull request and generated 6 comments.

Comment thread proto/mediapipelinemodule.proto
Comment thread media/public/include/IMediaPipelineClient.h
Comment thread media/client/ipc/interface/IMediaPipelineIpcClient.h
Comment thread media/server/gstplayer/interface/IGstGenericPlayerClient.h
Comment thread media/server/gstplayer/include/IGstGenericPlayerPrivate.h
Comment thread media/server/gstplayer/source/tasks/generic/SetupElement.cpp Outdated
@github-actions
Copy link
Copy Markdown

Coverage statistics of your commit:
Congratulations, your commit improved lines coverage from: 84.2% to 84.3%
Functions coverage stays unchanged and is: 92.6%

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.

3 participants