Skip to content

Commit fd10360

Browse files
committed
TEST - DO NOT MERGE
Signed-off-by: ryadav698 <[email protected]>
1 parent a27c350 commit fd10360

File tree

3 files changed

+85
-62
lines changed

3 files changed

+85
-62
lines changed

test/gstTestHarness/rialto-api-test.cpp

Lines changed: 72 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
#include <chrono>
55
#include <cstring>
66
#include <memory>
7+
#include <vector>
78
#include "mp4demux.hpp"
89
#include "rialto-gst-pipeline.h"
910

1011
static const int64_t NS_SECOND = 1000000000LL;
1112

1213
static Mp4Demux trackAudio;
1314
static Mp4Demux trackVideo;
14-
1515
static std::shared_ptr<GstMediaPipeline> gstMediaPipeline;
1616
static int gUserPathLen;
1717
static const char *gUserPathPtr;
@@ -43,7 +43,6 @@ void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
4343
assert(n == len);
4444
if (n == len)
4545
{
46-
4746
mp4Demux.Parse(ptr, (uint32_t)len);
4847
}
4948
free(ptr);
@@ -58,41 +57,79 @@ void ConfigureAudio()
5857
LoadAndDemuxSegment(trackAudio, "audio/init-stream0.m4s");
5958
std::cout << "loading rialtotest /tmp/data/bipbop-gen/audio/init-stream0.m4s" << std::endl;
6059

61-
// The 'tracks' array is likely missing. Assuming direct member access:
62-
std::unique_ptr<MediaSource> source =
63-
std::make_unique<MediaSourceAudio>(
64-
MediaSourceType::Audio,
65-
trackAudio.codec,
66-
trackAudio.mimeType,
67-
trackAudio.timeScale,
68-
trackAudio.initializationData);
60+
bool hasDrm = false;
61+
std::string mimeType;
62+
StreamFormat streamFormat = StreamFormat::AAC;
63+
SegmentAlignment alignment = SegmentAlignment::AU;
6964

65+
switch( trackAudio.codec_type )
66+
{
67+
case MultiChar_Constant("mp4a"):
68+
mimeType = "audio/mp4";
69+
streamFormat = StreamFormat::AAC;
70+
break;
71+
default:
72+
assert(0);
73+
break;
74+
}
7075

71-
assert(gstMediaPipeline->attachSource(source));
72-
73-
sourceIdAudio = source->getId();
76+
CodecData codecData;
77+
const char *codec_ptr = trackAudio.codec_data.c_str();
78+
codecData.data = std::vector<uint8_t>( codec_ptr, &codec_ptr[trackAudio.codec_data.size()] );
79+
80+
std::unique_ptr<IMediaPipeline::MediaSourceAudio> sourceAudio =
81+
std::make_unique<IMediaPipeline::MediaSourceAudio>(
82+
mimeType,
83+
hasDrm,
84+
alignment,
85+
streamFormat,
86+
trackAudio.audio.rate,
87+
trackAudio.audio.channels,
88+
std::make_shared<CodecData>(codecData) );
89+
90+
gstMediaPipeline->attachSource( std::move(sourceAudio), sourceIdAudio );
7491
}
7592

7693
void ConfigureVideo()
7794
{
78-
LoadAndDemuxSegment(trackVideo, "video/init-stream0.m4s");
79-
std::cout << "loading rialtotest /tmp/data/bipbop-gen/video/init-stream0.m4s" << std::endl;
80-
81-
82-
std::unique_ptr<MediaSource> source =
83-
std::make_unique<MediaSourceVideo>(
84-
MediaSourceType::Video,
85-
trackVideo.codec,
86-
trackVideo.mimeType,
87-
trackVideo.timeScale,
88-
trackVideo.initializationData,
89-
trackVideo.width,
90-
trackVideo.height);
91-
92-
// Using assert to attachSource returns a bool
93-
assert(gstMediaPipeline->attachSource(source));
94-
// Must move the unique_ptr out to get the ID, then detach it from 'source'
95-
sourceIdVideo = source->getId();
95+
LoadAndDemuxSegment( trackVideo, "video/init-stream0.m4s" );
96+
97+
bool hasDrm = false;
98+
std::string mimeType;
99+
StreamFormat streamFormat;
100+
int32_t width = trackVideo.video.width;
101+
int32_t height = trackVideo.video.height;
102+
SegmentAlignment alignment = SegmentAlignment::AU;
103+
104+
switch( trackVideo.codec_type )
105+
{
106+
case MultiChar_Constant("hvcC"):
107+
mimeType = "video/x-h265";
108+
streamFormat = StreamFormat::HVC1;
109+
break;
110+
case MultiChar_Constant("avcC"):
111+
mimeType = "video/x-h264";
112+
streamFormat = StreamFormat::AVC;
113+
break;
114+
default:
115+
assert(0);
116+
break;
117+
}
118+
CodecData codecData;
119+
const char *codec_ptr = trackVideo.codec_data.c_str();
120+
codecData.data = std::vector<uint8_t>( codec_ptr, &codec_ptr[trackVideo.codec_data.size()] );
121+
122+
std::unique_ptr<IMediaPipeline::MediaSourceVideo> sourceVideo =
123+
std::make_unique<IMediaPipeline::MediaSourceVideo>(
124+
mimeType,
125+
hasDrm,
126+
width,
127+
height,
128+
alignment,
129+
streamFormat,
130+
std::make_shared<CodecData>(codecData) );
131+
132+
gstMediaPipeline->attachSource( std::move(sourceVideo), sourceIdVideo );
96133
}
97134

98135
void ConfigureComplete()
@@ -105,7 +142,6 @@ void InjectAudio()
105142
LoadAndDemuxSegment(trackAudio, "audio/chunk-stream0-00001.m4s");
106143
std::cout << "loading rialtotest /tmp/data/bipbop-gen/audio/chunk-stream0-00001.m4s" << std::endl;
107144

108-
// Using getSegmentCount() instead of getNbSegments() or similar
109145
size_t segmentCount = trackAudio.getSegmentCount();
110146
printf("adding %zu audio frames\n", segmentCount);
111147

@@ -135,7 +171,6 @@ void InjectVideo()
135171
LoadAndDemuxSegment(trackVideo, "video/chunk-stream0-00001.m4s");
136172
std::cout << "loading rialtotest /tmp/data/bipbop-gen/video/chunk-stream0-00001.m4s" << std::endl;
137173

138-
// Using getSegmentCount() instead of getNbSegments() or similar
139174
size_t segmentCount = trackVideo.getSegmentCount();
140175
printf("adding %zu video frames\n", segmentCount);
141176

@@ -149,8 +184,8 @@ void InjectVideo()
149184
sourceIdVideo,
150185
(int64_t)(pts * NS_SECOND),
151186
(int64_t)(dur * NS_SECOND),
152-
trackVideo.width,
153-
trackVideo.height);
187+
trackVideo.video.width,
188+
trackVideo.video.height);
154189

155190
size_t len = trackVideo.getLen(i);
156191
uint8_t *data = new uint8_t[len];
@@ -192,6 +227,8 @@ int my_main(int argc, char **argv)
192227
InjectAudio();
193228
InjectVideo();
194229

230+
std::this_thread::sleep_for(std::chrono::seconds(5));
231+
195232
gstMediaPipeline->stop();
196233

197234
return 0;

test/gstTestHarness/rialto-gst-pipeline.cpp

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include <cassert>
55
#include <cstring>
66

7-
87
GstMediaPipeline::GstMediaPipeline()
98
{
109
std::cout << "Constructing GstMediaPipeline (Rialto-managed, public API)\n";
@@ -18,18 +17,14 @@ GstMediaPipeline::~GstMediaPipeline()
1817
}
1918
}
2019

21-
2220
bool GstMediaPipeline::init()
2321
{
24-
2522
std::shared_ptr<IMediaPipelineFactory> factory = IMediaPipelineFactory::createFactory();
2623
if (!factory)
2724
{
28-
std::cerr << "[GstMediaPipeline] ERROR: Failed to create IMediaPipelineFactory. Is libRialtoClient linked?\n";
25+
std::cerr << "[GstMediaPipeline] ERROR: Failed to create IMediaPipelineFactory.\n";
2926
return false;
3027
}
31-
32-
3328
VideoRequirements requirements = {1920, 1080};
3429

3530
m_pipeline = factory->createMediaPipeline(weak_from_this(), requirements);
@@ -44,6 +39,10 @@ bool GstMediaPipeline::init()
4439
return true;
4540
}
4641

42+
bool GstMediaPipeline::attachSource(std::unique_ptr<MediaSource> &&source, int32_t &sourceId)
43+
{
44+
return m_pipeline ? m_pipeline->attachSource(std::move(source), sourceId) : false;
45+
}
4746

4847
bool GstMediaPipeline::play()
4948
{
@@ -61,13 +60,6 @@ bool GstMediaPipeline::setVideoWindow(uint32_t x, uint32_t y, uint32_t width, ui
6160
return m_pipeline ? m_pipeline->setVideoWindow(x, y, width, height) : false;
6261
}
6362

64-
bool GstMediaPipeline::attachSource(const std::unique_ptr<MediaSource> &source)
65-
{
66-
if (!m_pipeline || !source) return false;
67-
68-
return m_pipeline->attachSource(source->copy());
69-
}
70-
7163
bool GstMediaPipeline::removeSource(int32_t id)
7264
{
7365
return m_pipeline ? m_pipeline->removeSource(id) : false;
@@ -88,8 +80,6 @@ AddSegmentStatus GstMediaPipeline::addSegment(uint32_t needDataRequestId, const
8880
return m_pipeline ? m_pipeline->addSegment(needDataRequestId, mediaSegment) : AddSegmentStatus::ERROR;
8981
}
9082

91-
// --- Callbacks from Rialto Server ---
92-
9383
void GstMediaPipeline::notifyPlaybackState(PlaybackState state)
9484
{
9585
std::cout << "[Rialto Callback] PlaybackState: " << (int)state << "\n";
@@ -110,7 +100,6 @@ void GstMediaPipeline::notifyNeedMediaData(int32_t sourceId, size_t frameCount,
110100
uint32_t needDataRequestId,
111101
const std::shared_ptr<MediaPlayerShmInfo> &mediaPlayerShmInfo)
112102
{
113-
// std::cout << "[Rialto Callback] NeedData request: " << needDataRequestId << "\n";
114103
}
115104

116105
bool GstMediaPipeline::pause() { return m_pipeline ? m_pipeline->pause() : false; }

test/gstTestHarness/rialto-gst-pipeline.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef GST_MEDIA_PIPELINE_H
22
#define GST_MEDIA_PIPELINE_H
33

4-
#include "IMediaPipeline.h" // Includes IMediaPipelineFactory
4+
#include "IMediaPipeline.h"
55
#include <memory>
66
#include <iostream>
77
#include <vector>
@@ -13,16 +13,14 @@ class GstMediaPipeline : public IMediaPipeline,
1313
public std::enable_shared_from_this<GstMediaPipeline>
1414
{
1515
private:
16-
std::shared_ptr<IMediaPipeline> m_pipeline;
16+
std::shared_ptr<IMediaPipeline> m_pipeline;
1717

1818
public:
1919
GstMediaPipeline();
2020
~GstMediaPipeline() override;
2121

22-
2322
bool init();
2423

25-
2624
std::weak_ptr<IMediaPipelineClient> getClient() override { return weak_from_this(); }
2725

2826
void notifyNetworkState(NetworkState state) override;
@@ -36,17 +34,16 @@ class GstMediaPipeline : public IMediaPipeline,
3634
void notifyPlaybackError(int32_t sourceId, PlaybackError error) override;
3735
void notifySourceFlushed(int32_t sourceId) override;
3836

39-
40-
bool play() override;
41-
bool stop() override;
42-
bool setVideoWindow(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override;
43-
bool attachSource(const std::unique_ptr<MediaSource> &source) override;
37+
bool attachSource(std::unique_ptr<MediaSource> &&source, int32_t &sourceId) override;
38+
bool attachSource(const std::unique_ptr<MediaSource> &source) override { return false; }
4439
bool removeSource(int32_t id) override;
4540
bool allSourcesAttached() override;
4641
bool load(MediaType type, const std::string &mimeType, const std::string &url) override;
4742
AddSegmentStatus addSegment(uint32_t needDataRequestId, const std::unique_ptr<MediaSegment> &mediaSegment) override;
4843

49-
44+
bool play() override;
45+
bool stop() override;
46+
bool setVideoWindow(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override;
5047
bool pause() override;
5148
bool setPlaybackRate(double) override;
5249
bool setPosition(int64_t) override;
@@ -79,4 +76,4 @@ class GstMediaPipeline : public IMediaPipeline,
7976
bool setTextTrackIdentifier(const std::string &) override;
8077
};
8178

82-
#endif // GST_MEDIA_PIPELINE_H
79+
#endif

0 commit comments

Comments
 (0)