1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

mp4 stts: fix multiplication duplication overflow warning.

This commit is contained in:
Jacob Su 2024-09-30 08:34:11 +08:00
parent 42ea5cfbf9
commit 652cdefaa2
2 changed files with 9 additions and 9 deletions

View file

@ -5024,9 +5024,9 @@ srs_error_t SrsMp4SampleManager::write_track(SrsFrameType track,
} }
if (stts && previous) { if (stts && previous) {
if (sample->dts >= previous->dts && previous->nb_samples > 0) { if (sample->dts >= previous->dts && previous->nb_subsamples > 0) {
uint32_t delta = (uint32_t)(sample->dts - previous->dts) / previous->nb_samples; uint32_t delta = (uint32_t)(sample->dts - previous->dts) / previous->nb_subsamples;
stts_entry.sample_count = previous->nb_samples; stts_entry.sample_count = previous->nb_subsamples;
// calcaulate delta in the time-scale of the media. // calcaulate delta in the time-scale of the media.
// moov->mvhd->timescale which is hardcoded to 1000, sample->tbn also being hardcoded to 1000. // moov->mvhd->timescale which is hardcoded to 1000, sample->tbn also being hardcoded to 1000.
stts_entry.sample_delta = delta * previous->tbn / 1000; stts_entry.sample_delta = delta * previous->tbn / 1000;
@ -5051,8 +5051,8 @@ srs_error_t SrsMp4SampleManager::write_track(SrsFrameType track,
previous = sample; previous = sample;
} }
if (stts && previous && previous->nb_samples > 0) { if (stts && previous && previous->nb_subsamples > 0) {
stts_entry.sample_count = previous->nb_samples; stts_entry.sample_count = previous->nb_subsamples;
// Can't calculate last sample duration, so set sample_delta to 1. // Can't calculate last sample duration, so set sample_delta to 1.
stts_entry.sample_delta = 1; stts_entry.sample_delta = 1;
stts_entries.push_back(stts_entry); stts_entries.push_back(stts_entry);
@ -5205,7 +5205,7 @@ srs_error_t SrsMp4SampleManager::load_trak(map<uint64_t, SrsMp4Sample*>& tses, S
uint32_t stts_index = sample->index - 1; uint32_t stts_index = sample->index - 1;
if (stts_index >= 0 && stts_index < stts->entries.size()) { if (stts_index >= 0 && stts_index < stts->entries.size()) {
SrsMp4SttsEntry* stts_entry = &stts->entries[stts_index]; SrsMp4SttsEntry* stts_entry = &stts->entries[stts_index];
sample->pts = sample->dts = previous->dts + stts_entry->sample_count * stts_entry->sample_delta; sample->pts = sample->dts = previous->dts + (uint64_t) stts_entry->sample_count * (uint64_t) stts_entry->sample_delta;
} else { } else {
sample->pts = sample->dts = previous->dts; sample->pts = sample->dts = previous->dts;
} }
@ -5781,12 +5781,12 @@ srs_error_t SrsMp4Encoder::write_sample(
ps->type = SrsFrameTypeVideo; ps->type = SrsFrameTypeVideo;
ps->frame_type = (SrsVideoAvcFrameType)ft; ps->frame_type = (SrsVideoAvcFrameType)ft;
ps->index = nb_videos++; ps->index = nb_videos++;
ps->nb_samples = format->video->nb_samples; ps->nb_subsamples = format->video->nb_samples;
vduration = dts; vduration = dts;
} else if (ht == SrsMp4HandlerTypeSOUN) { } else if (ht == SrsMp4HandlerTypeSOUN) {
ps->type = SrsFrameTypeAudio; ps->type = SrsFrameTypeAudio;
ps->index = nb_audios++; ps->index = nb_audios++;
ps->nb_samples = format->audio->nb_samples; ps->nb_subsamples = format->audio->nb_samples;
aduration = dts; aduration = dts;
} else { } else {
srs_freep(ps); srs_freep(ps);

View file

@ -1886,7 +1886,7 @@ public:
uint32_t nb_data; uint32_t nb_data;
uint8_t* data; uint8_t* data;
// number of nalu|audio-frames in this sample. // number of nalu|audio-frames in this sample.
uint32_t nb_samples; uint32_t nb_subsamples;
public: public:
SrsMp4Sample(); SrsMp4Sample();