Skip to content

Commit

Permalink
Mp4: added ngx_http_mp4_update_mdhd_atom() function.
Browse files Browse the repository at this point in the history
The function updates the duration field of mdhd atom.  Previously it was
updated in ngx_http_mp4_read_mdhd_atom().  The change makes it possible to
alter track duration as a result of processing track frames.
  • Loading branch information
arut committed Oct 28, 2021
1 parent 3253b34 commit 27cdfe3
Showing 1 changed file with 32 additions and 8 deletions.
40 changes: 32 additions & 8 deletions src/http/modules/ngx_http_mp4_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ typedef struct {
ngx_uint_t end_chunk_samples;
uint64_t start_chunk_samples_size;
uint64_t end_chunk_samples_size;
uint64_t duration;
off_t start_offset;
off_t end_offset;

Expand Down Expand Up @@ -253,6 +254,8 @@ static void ngx_http_mp4_update_mdia_atom(ngx_http_mp4_file_t *mp4,
ngx_http_mp4_trak_t *trak);
static ngx_int_t ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4,
uint64_t atom_data_size);
static void ngx_http_mp4_update_mdhd_atom(ngx_http_mp4_file_t *mp4,
ngx_http_mp4_trak_t *trak);
static ngx_int_t ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4,
uint64_t atom_data_size);
static ngx_int_t ngx_http_mp4_read_minf_atom(ngx_http_mp4_file_t *mp4,
Expand Down Expand Up @@ -822,7 +825,7 @@ ngx_http_mp4_process(ngx_http_mp4_file_t *mp4)

ngx_http_mp4_update_stbl_atom(mp4, &trak[i]);
ngx_http_mp4_update_minf_atom(mp4, &trak[i]);
trak[i].size += trak[i].mdhd_size;
ngx_http_mp4_update_mdhd_atom(mp4, &trak[i]);
trak[i].size += trak[i].hdlr_size;
ngx_http_mp4_update_mdia_atom(mp4, &trak[i]);
trak[i].size += trak[i].tkhd_size;
Expand Down Expand Up @@ -1749,16 +1752,10 @@ ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
trak = ngx_mp4_last_trak(mp4);
trak->mdhd_size = atom_size;
trak->timescale = timescale;
trak->duration = duration;

ngx_mp4_set_32value(mdhd_atom->size, atom_size);

if (mdhd_atom->version[0] == 0) {
ngx_mp4_set_32value(mdhd_atom->duration, duration);

} else {
ngx_mp4_set_64value(mdhd64_atom->duration, duration);
}

atom = &trak->mdhd_atom_buf;
atom->temporary = 1;
atom->pos = atom_header;
Expand All @@ -1772,6 +1769,33 @@ ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
}


static void
ngx_http_mp4_update_mdhd_atom(ngx_http_mp4_file_t *mp4,
ngx_http_mp4_trak_t *trak)
{
ngx_buf_t *atom;
ngx_mp4_mdhd_atom_t *mdhd_atom;
ngx_mp4_mdhd64_atom_t *mdhd64_atom;

atom = trak->out[NGX_HTTP_MP4_MDHD_ATOM].buf;
if (atom == NULL) {
return;
}

mdhd_atom = (ngx_mp4_mdhd_atom_t *) atom->pos;
mdhd64_atom = (ngx_mp4_mdhd64_atom_t *) atom->pos;

if (mdhd_atom->version[0] == 0) {
ngx_mp4_set_32value(mdhd_atom->duration, trak->duration);

} else {
ngx_mp4_set_64value(mdhd64_atom->duration, trak->duration);
}

trak->size += trak->mdhd_size;
}


static ngx_int_t
ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
{
Expand Down

0 comments on commit 27cdfe3

Please sign in to comment.