Skip to content

Commit

Permalink
fix some bad merge conflict resolutions, fix build and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cosmin committed May 1, 2024
1 parent ac64c92 commit d75752c
Show file tree
Hide file tree
Showing 25 changed files with 89 additions and 92 deletions.
2 changes: 1 addition & 1 deletion packager/app/muxer_flags.cc
Expand Up @@ -78,4 +78,4 @@ ABSL_FLAG(int64_t,
start_segment_number,
1,
"Indicates the startNumber in DASH SegmentTemplate and HLS "
"segment name.);
"segment name.");
Binary file not shown.
Binary file not shown.
26 changes: 13 additions & 13 deletions packager/app/test/testdata/dash-start-number/output.mpd
@@ -1,19 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
<!--Generated with https://github.com/shaka-project/shaka-packager version <tag>-<hash>-<test>-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" minBufferTime="PT2S" type="dynamic" publishTime="some_time" availabilityStartTime="some_time" minimumUpdatePeriod="PT5S" timeShiftBufferDepth="PT1800S">
<Period id="0" start="PT0S">
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" segmentAlignment="true" par="16:9">
<Representation id="0" bandwidth="974154" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
<SegmentTemplate timescale="30000" initialization="bear-640x360-video-init.mp4" media="bear-640x360-video-$Number$.m4s" startNumber="0">
<SegmentTimeline>
<S t="0" d="30030" r="1"/>
<S t="60060" d="22022"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
<Representation id="1" bandwidth="133961" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
<AdaptationSet id="0" contentType="audio" startWithSAP="1" segmentAlignment="true">
<Representation id="0" bandwidth="133961" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<SegmentTemplate timescale="44100" initialization="bear-640x360-audio-init.mp4" media="bear-640x360-audio-$Number$.m4s" startNumber="0">
<SegmentTimeline>
Expand All @@ -24,5 +14,15 @@
</SegmentTemplate>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="video" width="640" height="360" frameRate="30000/1001" segmentAlignment="true" par="16:9">
<Representation id="1" bandwidth="974154" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
<SegmentTemplate timescale="30000" initialization="bear-640x360-video-init.mp4" media="bear-640x360-video-$Number$.m4s" startNumber="0">
<SegmentTimeline>
<S t="0" d="30030" r="1"/>
<S t="60060" d="22022"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
1 change: 0 additions & 1 deletion packager/media/base/text_muxer.cc
Expand Up @@ -87,7 +87,6 @@ Status TextMuxer::FinalizeSegment(size_t stream_id,
const std::string& segment_template = options().segment_template;
DCHECK(!segment_template.empty());

const uint32_t index = segment_info.segment_index;
const int64_t start = segment_info.start_timestamp;
const int64_t duration = segment_info.duration;
const uint32_t segment_number = segment_info.segment_number;
Expand Down
6 changes: 3 additions & 3 deletions packager/media/event/combined_muxer_listener.h
Expand Up @@ -44,10 +44,10 @@ class CombinedMuxerListener : public MuxerListener {
void OnNewSegment(const std::string& file_name,
int64_t start_time,
int64_t duration,
uint64_t segment_file_size) override;
uint64_t segment_file_size,
int64_t segment_number) override;
void OnCompletedSegment(int64_t duration,
uint64_t segment_file_size,
int64_t segment_number) override;
uint64_t segment_file_size) override;
void OnKeyFrame(int64_t timestamp,
uint64_t start_byte_offset,
uint64_t size) override;
Expand Down
3 changes: 2 additions & 1 deletion packager/media/event/hls_notify_muxer_listener.cc
Expand Up @@ -249,7 +249,8 @@ void HlsNotifyMuxerListener::OnNewSegment(const std::string& file_name,
if (!media_info_->has_segment_template()) {
EventInfo event_info;
event_info.type = EventInfoType::kSegment;
event_info.segment_info = {start_time, duration, segment_file_size};
event_info.segment_info = {start_time, duration, segment_file_size,
segment_number};
event_info_.push_back(event_info);
} else {
// For multisegment, it always starts from the beginning of the file.
Expand Down
2 changes: 1 addition & 1 deletion packager/media/event/mpd_notify_muxer_listener.cc
Expand Up @@ -214,7 +214,7 @@ void MpdNotifyMuxerListener::OnNewSegment(const std::string& file_name,
EventInfo event_info;
event_info.type = EventInfoType::kSegment;
event_info.segment_info = {start_time, duration, segment_file_size,
segment_number};
segment_number};
event_info_.push_back(event_info);
}
}
Expand Down
52 changes: 32 additions & 20 deletions packager/media/event/mpd_notify_muxer_listener_unittest.cc
Expand Up @@ -437,29 +437,33 @@ TEST_F(MpdNotifyMuxerListenerTest, VodOnNewSegmentSegmentList) {
const int64_t kStartTime1 = 0;
const int64_t kDuration1 = 1000;
const uint64_t kSegmentFileSize1 = 29812u;
const int64_t kSegmentNumber1 = 1;
const int64_t kStartTime2 = 1001;
const int64_t kDuration2 = 3787;
const uint64_t kSegmentFileSize2 = 83743u;
const int64_t kSegmentNumber2 = 2;

EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0);
EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0);
EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0);
listener_->OnMediaStart(muxer_options, *video_stream_info,
kDefaultReferenceTimeScale,
MuxerListener::kContainerMp4);
listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1);
listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1,
kSegmentNumber1);
listener_->OnCueEvent(kStartTime2, "dummy cue data");
listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2);
listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2,
kSegmentNumber2);
::testing::Mock::VerifyAndClearExpectations(notifier_.get());

InSequence s;
EXPECT_CALL(*notifier_, NotifyNewContainer(
ExpectMediaInfoEq(kExpectedDefaultMediaInfoSubsegmentRange), _))
.WillOnce(Return(true));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1,
kSegmentFileSize1, kSegmentNumber1));
EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2,
kSegmentFileSize2, kSegmentNumber2));
EXPECT_CALL(*notifier_, Flush());
FireOnMediaEndWithParams(GetDefaultOnMediaEndParams());
}
Expand Down Expand Up @@ -552,17 +556,20 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) {
const int64_t kStartTime1 = 0;
const int64_t kDuration1 = 1000;
const uint64_t kSegmentFileSize1 = 29812u;
const int64_t kSegmentNumber1 = 1;
const int64_t kStartTime2 = 1001;
const int64_t kDuration2 = 3787;
const uint64_t kSegmentFileSize2 = 83743u;
const int64_t kSegmentNumber2 = 2;

// Expectation for first file before OnMediaEnd.
EXPECT_CALL(*notifier_, NotifyNewContainer(_, _)).Times(0);
EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _)).Times(0);
EXPECT_CALL(*notifier_, NotifyNewSegment(_, _, _, _, _)).Times(0);
listener_->OnMediaStart(muxer_options1, *video_stream_info,
kDefaultReferenceTimeScale,
MuxerListener::kContainerMp4);
listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1);
listener_->OnNewSegment("", kStartTime1, kDuration1, kSegmentFileSize1,
kSegmentNumber1);
listener_->OnCueEvent(kStartTime2, "dummy cue data");
::testing::Mock::VerifyAndClearExpectations(notifier_.get());

Expand All @@ -571,8 +578,8 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) {
EXPECT_CALL(*notifier_,
NotifyNewContainer(EqualsProto(expected_media_info1), _))
.WillOnce(Return(true));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime1, kDuration1, kSegmentFileSize1));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration1,
kSegmentFileSize1, kSegmentNumber1));
EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2));
EXPECT_CALL(*notifier_, Flush());
FireOnMediaEndWithParams(GetDefaultOnMediaEndParams());
Expand All @@ -581,13 +588,14 @@ TEST_F(MpdNotifyMuxerListenerTest, VodMultipleFilesSegmentList) {
listener_->OnMediaStart(muxer_options2, *video_stream_info,
kDefaultReferenceTimeScale,
MuxerListener::kContainerMp4);
listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2);
listener_->OnNewSegment("", kStartTime2, kDuration2, kSegmentFileSize2,
kSegmentNumber2);

// Expectation for second file OnMediaEnd.
EXPECT_CALL(*notifier_,
NotifyMediaInfoUpdate(_, EqualsProto(expected_media_info2)));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime2, kDuration2, kSegmentFileSize2));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration2,
kSegmentFileSize2, kSegmentNumber2));
EXPECT_CALL(*notifier_, Flush());
FireOnMediaEndWithParams(GetDefaultOnMediaEndParams());
}
Expand Down Expand Up @@ -621,6 +629,8 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) {
const uint64_t kDuration = 1000u;
const uint64_t kSegmentSize1 = 29812u;
const uint64_t kSegmentSize2 = 30128u;
const int64_t kSegmentNumber1 = 1;
const int64_t kSegmentNumber2 = 2;

EXPECT_CALL(*notifier_,
NotifyNewContainer(ExpectMediaInfoEq(kExpectedMediaInfo), _))
Expand All @@ -630,11 +640,11 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) {
EXPECT_CALL(*notifier_, NotifyAvailabilityTimeOffset(_))
.WillOnce(Return(true));
EXPECT_CALL(*notifier_, NotifySegmentDuration(_)).WillOnce(Return(true));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime1, kDuration, kSegmentSize1));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime1, kDuration,
kSegmentSize1, kSegmentNumber1));
EXPECT_CALL(*notifier_, NotifyCueEvent(_, kStartTime2));
EXPECT_CALL(*notifier_,
NotifyNewSegment(_, kStartTime2, kDuration, kSegmentSize2));
EXPECT_CALL(*notifier_, NotifyNewSegment(_, kStartTime2, kDuration,
kSegmentSize2, kSegmentNumber2));
EXPECT_CALL(*notifier_, Flush()).Times(2);

listener_->OnMediaStart(muxer_options, *video_stream_info,
Expand All @@ -643,9 +653,11 @@ TEST_F(MpdNotifyMuxerListenerTest, LowLatencyDash) {
listener_->OnSampleDurationReady(kDuration);
listener_->OnAvailabilityOffsetReady();
listener_->OnSegmentDurationReady();
listener_->OnNewSegment("", kStartTime1, kDuration, kSegmentSize1);
listener_->OnNewSegment("", kStartTime1, kDuration, kSegmentSize1,
kSegmentNumber1);
listener_->OnCueEvent(kStartTime2, "dummy cue data");
listener_->OnNewSegment("", kStartTime2, kDuration, kSegmentSize2);
listener_->OnNewSegment("", kStartTime2, kDuration, kSegmentSize2,
kSegmentNumber2);
::testing::Mock::VerifyAndClearExpectations(notifier_.get());

EXPECT_CALL(*notifier_, Flush()).Times(0);
Expand Down
3 changes: 0 additions & 3 deletions packager/media/formats/mp2t/ts_muxer.h
Expand Up @@ -41,9 +41,6 @@ class TsMuxer : public Muxer {
int64_t sample_durations_[2] = {0, 0};
size_t num_samples_ = 0;

// Used in multi-segment mode for segment template.
uint64_t segment_number_ = 0;

// Used in single segment mode.
std::unique_ptr<File, FileCloser> output_file_;

Expand Down
24 changes: 6 additions & 18 deletions packager/media/formats/mp2t/ts_segmenter_unittest.cc
Expand Up @@ -196,7 +196,6 @@ TEST_F(TsSegmenterTest, PassedSegmentDuration) {
TsSegmenter segmenter(options, &mock_listener);

const int32_t kFirstPts = 1000;
const int64_t kSegmentNumber = 1;

EXPECT_CALL(*mock_pes_packet_generator_, Initialize(_))
.WillOnce(Return(true));
Expand All @@ -209,11 +208,6 @@ TEST_F(TsSegmenterTest, PassedSegmentDuration) {
// Doesn't really matter how long this is.
sample2->set_duration(kInputTimescale * 7);

EXPECT_CALL(mock_listener,
OnNewSegment("memory://file1.ts",
kFirstPts * kTimeScale / kInputTimescale,
kTimeScale * 11, _, _));

Sequence writer_sequence;
EXPECT_CALL(*mock_ts_writer_, NewSegment(_))
.InSequence(writer_sequence)
Expand Down Expand Up @@ -265,8 +259,7 @@ TEST_F(TsSegmenterTest, PassedSegmentDuration) {
EXPECT_OK(segmenter.Initialize(*stream_info));
segmenter.InjectTsWriterForTesting(std::move(mock_ts_writer_));
EXPECT_OK(segmenter.AddSample(*sample1));
EXPECT_OK(segmenter.FinalizeSegment(kFirstPts, sample1->duration(),
kSegmentNumber));
EXPECT_OK(segmenter.FinalizeSegment(kFirstPts, sample1->duration()));
EXPECT_OK(segmenter.AddSample(*sample2));
}

Expand Down Expand Up @@ -310,8 +303,6 @@ TEST_F(TsSegmenterTest, FinalizeSegment) {
options.segment_template = "file$Number$.ts";
TsSegmenter segmenter(options, nullptr);

const int64_t kSegmentNumber = 1;

EXPECT_CALL(*mock_pes_packet_generator_, Initialize(_))
.WillOnce(Return(true));

Expand All @@ -325,8 +316,7 @@ TEST_F(TsSegmenterTest, FinalizeSegment) {
EXPECT_OK(segmenter.Initialize(*stream_info));
segmenter.InjectTsWriterForTesting(std::move(mock_ts_writer_));

EXPECT_OK(segmenter.FinalizeSegment(0, 100 /* arbitrary duration*/,
kSegmentNumber));
EXPECT_OK(segmenter.FinalizeSegment(0, 100 /* arbitrary duration*/));
}

TEST_F(TsSegmenterTest, EncryptedSample) {
Expand All @@ -350,11 +340,11 @@ TEST_F(TsSegmenterTest, EncryptedSample) {
ON_CALL(*mock_pes_packet_generator_, Flush()).WillByDefault(Return(true));

const uint8_t kAnyData[] = {
0x01, 0x0F, 0x3C,
0x01,
0x0F,
0x3C,
};

const int64_t kSegmentNumber = 1;

std::shared_ptr<MediaSample> sample1 =
MediaSample::CopyFrom(kAnyData, std::size(kAnyData), kIsKeyFrame);
sample1->set_duration(kTimeScale * 2);
Expand Down Expand Up @@ -399,8 +389,6 @@ TEST_F(TsSegmenterTest, EncryptedSample) {
.InSequence(pes_packet_sequence)
.WillOnce(Return(new PesPacket()));

EXPECT_CALL(mock_listener, OnNewSegment("memory://file1.ts", _, _, _, _));

MockTsWriter* mock_ts_writer_raw = mock_ts_writer_.get();

segmenter.InjectPesPacketGeneratorForTesting(
Expand All @@ -409,7 +397,7 @@ TEST_F(TsSegmenterTest, EncryptedSample) {
EXPECT_OK(segmenter.Initialize(*stream_info));
segmenter.InjectTsWriterForTesting(std::move(mock_ts_writer_));
EXPECT_OK(segmenter.AddSample(*sample1));
EXPECT_OK(segmenter.FinalizeSegment(1, sample1->duration(), kSegmentNumber));
EXPECT_OK(segmenter.FinalizeSegment(1, sample1->duration()));
// Signal encrypted if sample is encrypted.
EXPECT_CALL(*mock_ts_writer_raw, SignalEncrypted());
sample2->set_is_encrypted(true);
Expand Down
1 change: 0 additions & 1 deletion packager/media/formats/mp2t/ts_writer.cc
Expand Up @@ -189,7 +189,6 @@ void TsWriter::SignalEncrypted() {

bool TsWriter::AddPesPacket(std::unique_ptr<PesPacket> pes_packet,
BufferWriter* buffer) {

if (!WritePesToBuffer(*pes_packet, &elementary_stream_continuity_counter_,
buffer)) {
LOG(ERROR) << "Failed to write pes to buffer.";
Expand Down
14 changes: 7 additions & 7 deletions packager/media/formats/mp4/low_latency_segment_segmenter.cc
Expand Up @@ -71,13 +71,13 @@ Status LowLatencySegmentSegmenter::DoFinalize() {
return Status::OK;
}

Status LowLatencySegmentSegmenter::DoFinalizeSegment() {
Status LowLatencySegmentSegmenter::DoFinalizeSegment(int64_t segment_number) {
return FinalizeSegment();
}

Status LowLatencySegmentSegmenter::DoFinalizeChunk() {
Status LowLatencySegmentSegmenter::DoFinalizeChunk(int64_t segment_number) {
if (is_initial_chunk_in_seg_) {
return WriteInitialChunk();
return WriteInitialChunk(segment_number);
}
return WriteChunk();
}
Expand All @@ -98,7 +98,7 @@ Status LowLatencySegmentSegmenter::WriteInitSegment() {
return buffer->WriteToFile(file.get());
}

Status LowLatencySegmentSegmenter::WriteInitialChunk() {
Status LowLatencySegmentSegmenter::WriteInitialChunk(int64_t segment_number) {
DCHECK(sidx());
DCHECK(fragment_buffer());
DCHECK(styp_);
Expand Down Expand Up @@ -161,9 +161,9 @@ Status LowLatencySegmentSegmenter::WriteInitialChunk() {
}
// Add the current segment in the manifest.
// Following chunks will be appended to the open segment file.
muxer_listener()->OnNewSegment(file_name_,
sidx()->earliest_presentation_time,
segment_duration, segment_size_);
muxer_listener()->OnNewSegment(
file_name_, sidx()->earliest_presentation_time, segment_duration,
segment_size_, segment_number);
is_initial_chunk_in_seg_ = false;
}

Expand Down
6 changes: 3 additions & 3 deletions packager/media/formats/mp4/low_latency_segment_segmenter.h
Expand Up @@ -44,13 +44,13 @@ class LowLatencySegmentSegmenter : public Segmenter {
// Segmenter implementation overrides.
Status DoInitialize() override;
Status DoFinalize() override;
Status DoFinalizeSegment() override;
Status DoFinalizeChunk() override;
Status DoFinalizeSegment(int64_t segment_number) override;
Status DoFinalizeChunk(int64_t segment_number) override;

// Write segment to file.
Status WriteInitSegment();
Status WriteChunk();
Status WriteInitialChunk();
Status WriteInitialChunk(int64_t segment_number);
Status FinalizeSegment();

uint64_t GetSegmentDuration();
Expand Down
2 changes: 1 addition & 1 deletion packager/media/formats/mp4/segmenter.cc
Expand Up @@ -234,7 +234,7 @@ Status Segmenter::FinalizeSegment(size_t stream_id,

if (segment_info.is_chunk) {
// Finalize the completed chunk for the LL-DASH case.
status = DoFinalizeChunk();
status = DoFinalizeChunk(segment_info.segment_number);
if (!status.ok())
return status;
}
Expand Down
3 changes: 1 addition & 2 deletions packager/media/formats/mp4/segmenter.h
Expand Up @@ -128,8 +128,7 @@ class Segmenter {
virtual Status DoInitialize() = 0;
virtual Status DoFinalize() = 0;
virtual Status DoFinalizeSegment(int64_t segment_number) = 0;

virtual Status DoFinalizeChunk() { return Status::OK; }
virtual Status DoFinalizeChunk(int64_t segment_number) { return Status::OK; }

uint32_t GetReferenceStreamId();

Expand Down

0 comments on commit d75752c

Please sign in to comment.