Skip to content

Commit f0fdd22

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

File tree

3 files changed

+227
-248
lines changed

3 files changed

+227
-248
lines changed

test/gstTestHarness/rialto-api-test.cpp

Lines changed: 60 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@
44
#include <chrono>
55
#include <cstring>
66
#include <memory>
7-
#include "mp4demux.hpp"
7+
#include "mp4demux.hpp" // Assuming this is your demuxer
88
#include "rialto-gst-pipeline.h"
99

1010
// Nanosecond conversion for timestamps
1111
static const int64_t NS_SECOND = 1000000000LL;
1212

1313
static Mp4Demux trackAudio;
1414
static Mp4Demux trackVideo;
15-
static GstMediaPipeline *gstMediaPipeline;
15+
// *** CRITICAL CHANGE: Now uses shared_ptr ***
16+
static std::shared_ptr<GstMediaPipeline> gstMediaPipeline;
1617
static int gUserPathLen;
1718
static const char *gUserPathPtr;
1819
static int32_t sourceIdAudio;
1920
static int32_t sourceIdVideo;
2021

22+
using namespace firebolt::rialto;
23+
2124
void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
2225
{
2326
char fullpath[512];
@@ -41,7 +44,7 @@ void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
4144
assert(n == len);
4245
if (n == len)
4346
{
44-
mp4Demux.Parse(ptr, len);
47+
mp4Demux.load(ptr, (uint32_t)len);
4548
}
4649
free(ptr);
4750
}
@@ -53,75 +56,43 @@ void LoadAndDemuxSegment(Mp4Demux &mp4Demux, const char *path)
5356
void ConfigureAudio()
5457
{
5558
LoadAndDemuxSegment(trackAudio, "audio/init-stream0.m4s");
59+
std::cout << "loading rialtotest /tmp/data/bipbop-gen/audio/init-stream0.m4s" << std::endl;
5660

57-
bool hasDrm = false;
58-
std::string mimeType;
59-
StreamFormat streamFormat;
60-
AudioConfig audioConfig;
61-
audioConfig.numberOfChannels = trackAudio.audio.channel_count;
62-
audioConfig.sampleRate = trackAudio.audio.samplerate;
63-
64-
switch (trackAudio.codec_type)
65-
{
66-
case MultiChar_Constant("esds"):
67-
mimeType = "audio/mpeg";
68-
streamFormat = StreamFormat::RAW;
69-
break;
70-
case MultiChar_Constant("dec3"):
71-
mimeType = "audio/x-eac3";
72-
streamFormat = StreamFormat::UNDEFINED;
73-
break;
74-
default:
75-
assert(0);
76-
}
77-
78-
std::unique_ptr<IMediaPipeline::MediaSource> sourceAudio =
79-
std::make_unique<IMediaPipeline::MediaSourceAudio>(
80-
mimeType, hasDrm, audioConfig, SegmentAlignment::UNDEFINED, streamFormat, nullptr);
61+
assert(trackAudio.tracks.size() == 1);
62+
assert(trackAudio.tracks[0].type == MediaSourceType::Audio);
8163

82-
bool okA = gstMediaPipeline->attachSource(sourceAudio);
83-
// assert(okA);
64+
std::unique_ptr<MediaSource> source =
65+
std::make_unique<MediaSourceAudio>(
66+
trackAudio.tracks[0].type,
67+
trackAudio.tracks[0].codec,
68+
trackAudio.tracks[0].mimeType,
69+
trackAudio.tracks[0].timeScale,
70+
trackAudio.tracks[0].initializationData);
8471

85-
sourceIdAudio = sourceAudio->getId();
72+
assert(gstMediaPipeline->attachSource(source));
73+
sourceIdAudio = source->getId();
8674
}
8775

8876
void ConfigureVideo()
8977
{
9078
LoadAndDemuxSegment(trackVideo, "video/init-stream0.m4s");
91-
92-
bool hasDrm = false;
93-
std::string mimeType;
94-
StreamFormat streamFormat;
95-
int32_t width = trackVideo.video.width;
96-
int32_t height = trackVideo.video.height;
97-
SegmentAlignment alignment = SegmentAlignment::AU;
98-
99-
switch (trackVideo.codec_type)
100-
{
101-
case MultiChar_Constant("hvcC"):
102-
mimeType = "video/x-h265";
103-
streamFormat = StreamFormat::HVC1;
104-
break;
105-
case MultiChar_Constant("avcC"):
106-
mimeType = "video/x-h264";
107-
streamFormat = StreamFormat::AVC;
108-
break;
109-
default:
110-
assert(0);
111-
}
112-
113-
CodecData codecData;
114-
const char *codec_ptr = trackVideo.codec_data.c_str();
115-
codecData.data = std::vector<uint8_t>(codec_ptr, &codec_ptr[trackVideo.codec_data.size()]);
116-
117-
std::unique_ptr<IMediaPipeline::MediaSource> sourceVideo =
118-
std::make_unique<IMediaPipeline::MediaSourceVideo>(
119-
mimeType, hasDrm, width, height, alignment, streamFormat, std::make_shared<CodecData>(codecData));
120-
121-
bool okV = gstMediaPipeline->attachSource(sourceVideo);
122-
// assert(okV);
123-
124-
sourceIdVideo = sourceVideo->getId();
79+
std::cout << "loading rialtotest /tmp/data/bipbop-gen/video/init-stream0.m4s" << std::endl;
80+
81+
assert(trackVideo.tracks.size() == 1);
82+
assert(trackVideo.tracks[0].type == MediaSourceType::Video);
83+
84+
std::unique_ptr<MediaSource> source =
85+
std::make_unique<MediaSourceVideo>(
86+
trackVideo.tracks[0].type,
87+
trackVideo.tracks[0].codec,
88+
trackVideo.tracks[0].mimeType,
89+
trackVideo.tracks[0].timeScale,
90+
trackVideo.tracks[0].initializationData,
91+
trackVideo.tracks[0].video.width,
92+
trackVideo.tracks[0].video.height);
93+
94+
assert(gstMediaPipeline->attachSource(source));
95+
sourceIdVideo = source->getId();
12596
}
12697

12798
void ConfigureComplete()
@@ -132,10 +103,10 @@ void ConfigureComplete()
132103
void InjectAudio()
133104
{
134105
LoadAndDemuxSegment(trackAudio, "audio/chunk-stream0-00001.m4s");
135-
int count = trackAudio.count();
136-
printf("adding %d audio frames\n", count);
106+
std::cout << "loading rialtotest /tmp/data/bipbop-gen/audio/chunk-stream0-00001.m4s" << std::endl;
107+
printf("adding %zu audio frames\n", trackAudio.getNbSegments());
137108

138-
for (int i = 0; i < count; i++)
109+
for (size_t i = 0; i < trackAudio.getNbSegments(); ++i)
139110
{
140111
double pts = trackAudio.getPts(i);
141112
double dur = trackAudio.getDuration(i);
@@ -144,9 +115,7 @@ void InjectAudio()
144115
std::make_unique<IMediaPipeline::MediaSegmentAudio>(
145116
sourceIdAudio,
146117
(int64_t)(pts * NS_SECOND),
147-
(int64_t)(dur * NS_SECOND),
148-
trackAudio.audio.samplerate,
149-
trackAudio.audio.channel_count);
118+
(int64_t)(dur * NS_SECOND));
150119

151120
size_t len = trackAudio.getLen(i);
152121
uint8_t *data = new uint8_t[len];
@@ -161,10 +130,10 @@ void InjectAudio()
161130
void InjectVideo()
162131
{
163132
LoadAndDemuxSegment(trackVideo, "video/chunk-stream0-00001.m4s");
164-
int count = trackVideo.count();
165-
printf("adding %d video frames\n", count);
133+
std::cout << "loading rialtotest /tmp/data/bipbop-gen/video/chunk-stream0-00001.m4s" << std::endl;
134+
printf("adding %zu video frames\n", trackVideo.getNbSegments());
166135

167-
for (int i = 0; i < count; i++)
136+
for (size_t i = 0; i < trackVideo.getNbSegments(); ++i)
168137
{
169138
double pts = trackVideo.getPts(i);
170139
double dur = trackVideo.getDuration(i);
@@ -174,8 +143,8 @@ void InjectVideo()
174143
sourceIdVideo,
175144
(int64_t)(pts * NS_SECOND),
176145
(int64_t)(dur * NS_SECOND),
177-
trackVideo.video.width,
178-
trackVideo.video.height);
146+
trackVideo.tracks[0].video.width,
147+
trackVideo.tracks[0].video.height);
179148

180149
size_t len = trackVideo.getLen(i);
181150
uint8_t *data = new uint8_t[len];
@@ -196,7 +165,18 @@ int my_main(int argc, char **argv)
196165
const char *delim = strchr(&gUserPathPtr[prefixLen], '/');
197166
gUserPathLen = (int)(delim - gUserPathPtr);
198167

199-
gstMediaPipeline = new GstMediaPipeline();
168+
gstMediaPipeline = std::make_shared<GstMediaPipeline>();
169+
if (!gstMediaPipeline->init())
170+
{
171+
fprintf(stderr, "FATAL: Failed to initialize Rialto pipeline. Check logs/server status.\n");
172+
return -1;
173+
}
174+
175+
if (!gstMediaPipeline->setVideoWindow(0, 0, 1920, 1080))
176+
{
177+
fprintf(stderr, "Warning: Failed to set video window. Video may not appear.\n");
178+
}
179+
200180
gstMediaPipeline->play();
201181

202182
ConfigureAudio();
@@ -205,16 +185,18 @@ int my_main(int argc, char **argv)
205185

206186
InjectAudio();
207187
InjectVideo();
188+
189+
gstMediaPipeline->stop();
208190

209-
std::this_thread::sleep_for(std::chrono::seconds(2));
210191
return 0;
211192
}
212193

213194
int main(int argc, char **argv)
214195
{
196+
215197
#if defined(__APPLE__) && defined(__GST_MACOS_H__)
216198
return gst_macos_main((GstMainFunc)my_main, argc, argv, nullptr);
217199
#else
218200
return my_main(argc, argv);
219201
#endif
220-
}
202+
}

0 commit comments

Comments
 (0)