Skip to content

Commit

Permalink
minivideo: minor addintions to the mp4 parser
Browse files Browse the repository at this point in the history
  • Loading branch information
emericg committed Jun 3, 2024
1 parent b6bec0e commit 35504a4
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 19 deletions.
18 changes: 5 additions & 13 deletions minivideo/src/demuxer/mp4/mp4_picture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -630,21 +630,13 @@ int parse_pitm(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
box_header->version = (uint8_t)read_bits(bitstr, 8);
box_header->flags = read_bits(bitstr, 24);

// Read box content
uint16_t mainref = read_bits(bitstr, 16);

#if ENABLE_DEBUG
print_box_header(box_header);
TRACE_1(MP4, "> main item reference : %u", mainref);
#endif
write_box_header(box_header, mp4->xml, "Primary Item reference");

// xmlMapper
if (mp4->xml)
{
write_box_header(box_header, mp4->xml, "Primary Item reference");
fprintf(mp4->xml, " <main_item_reference>%u</main_item_reference>\n", mainref);
fprintf(mp4->xml, " </a>\n");
}
// Read box content
uint16_t mainref = read_mp4_uint16(bitstr, mp4->xml, "main_item_reference");

if (mp4->xml) fprintf(mp4->xml, " </a>\n");

return retcode;
}
Expand Down
99 changes: 95 additions & 4 deletions minivideo/src/demuxer/mp4/mp4_stbl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,20 +87,23 @@ int parse_stbl(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
retcode = parse_stsc(bitstr, &box_subheader, track, mp4);
break;
case BOX_STSZ:
retcode = parse_stsz(bitstr, &box_subheader, track, mp4);
break;
case BOX_STZ2:
retcode = parse_stsz(bitstr, &box_subheader, track, mp4);
break;
case BOX_STCO:
retcode = parse_stco(bitstr, &box_subheader, track, mp4);
break;
case BOX_CO64:
retcode = parse_stco(bitstr, &box_subheader, track, mp4);
break;

case BOX_SDTP:
retcode = parse_sdtp(bitstr, &box_subheader, track, mp4);
break;
case BOX_SBGP:
retcode = parse_sbgp(bitstr, &box_subheader, track, mp4);
break;
case BOX_SGPD:
retcode = parse_sgpd(bitstr, &box_subheader, track, mp4);
break;

default:
retcode = parse_unknown_box(bitstr, &box_subheader, mp4->xml);
Expand Down Expand Up @@ -711,3 +714,91 @@ int parse_sdtp(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
}

/* ************************************************************************** */

/*!
* \brief Sample To Group Description Box - FullBox.
*
* From 'ISO/IEC 14496-12' specification:
* 8.9.2 Sample to Group Box
*/
int parse_sbgp(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4)
{
TRACE_INFO(MP4, BLD_GREEN "parse_sbgp()" CLR_RESET);
int retcode = SUCCESS;

// Read FullBox attributes
box_header->version = (uint8_t)read_bits(bitstr, 8);
box_header->flags = read_bits(bitstr, 24);

print_box_header(box_header);
write_box_header(box_header, mp4->xml, "Sample To Group");

// Parse box content
uint32_t grouping_type = read_mp4_uint32(bitstr, mp4->xml, "grouping_type");
if (box_header->version == 1)
{
uint32_t grouping_type_parameter = read_mp4_uint32(bitstr, mp4->xml, "grouping_type_parameter");
}

uint32_t entry_count = read_mp4_uint32(bitstr, mp4->xml, "entry_count");
for (uint32_t i = 1; i <= entry_count; i++)
{
uint32_t sample_count = read_mp4_uint32(bitstr, mp4->xml, "sample_count");
uint32_t group_description_index = read_mp4_uint32(bitstr, mp4->xml, "group_description_index");
}

if (mp4->xml) fprintf(mp4->xml, " </a>\n");

return retcode;
}

/* ************************************************************************** */

/*!
* \brief Sample Group Description Box - FullBox.
*
* From 'ISO/IEC 14496-12' specification:
* 8.9.3 Sample Group Description Box
*/
int parse_sgpd(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4)
{
TRACE_INFO(MP4, BLD_GREEN "parse_sgpd()" CLR_RESET);
int retcode = SUCCESS;

// Read FullBox attributes
box_header->version = (uint8_t)read_bits(bitstr, 8);
box_header->flags = read_bits(bitstr, 24);

print_box_header(box_header);
write_box_header(box_header, mp4->xml, "Sample Group Description");

// Parse box content
uint32_t grouping_type = read_mp4_uint32(bitstr, mp4->xml, "grouping_type");
uint32_t default_length = 0;
if (box_header->version == 1)
{
default_length = read_mp4_uint32(bitstr, mp4->xml, "default_length");
}
if (box_header->version >= 2)
{
uint32_t default_sample_description_index = read_mp4_uint32(bitstr, mp4->xml, "default_sample_description_index");
}

uint32_t entry_count = read_mp4_uint32(bitstr, mp4->xml, "entry_count");
for (unsigned i = 1 ; i <= entry_count ; i++)
{
if (box_header->version == 1)
{
if (default_length == 0)
{
uint32_t description_length = read_mp4_uint32(bitstr, mp4->xml, "description_length");
}
}
}

if (mp4->xml) fprintf(mp4->xml, " </a>\n");

return retcode;
}

/* ************************************************************************** */
3 changes: 3 additions & 0 deletions minivideo/src/demuxer/mp4/mp4_stbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ int parse_stbl(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
int parse_stsc(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);
int parse_stsz(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);
int parse_stco(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);

int parse_sdtp(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);
int parse_sgpd(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);
int parse_sbgp(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4_t *mp4);

/* ************************************************************************** */
#endif // PARSER_MP4_STBL_H
6 changes: 4 additions & 2 deletions minivideo/src/demuxer/mp4/mp4_stsd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,7 @@ int parse_hvcC(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
track->hvcC->lengthSizeMinusOne = read_bits(bitstr, 2);

track->hvcC->numOfArrays = read_bits(bitstr, 8);
/*

bool *array_completeness = NULL;
uint8_t *NAL_unit_type = NULL;
uint16_t *numNalus = NULL;
Expand All @@ -1344,6 +1344,7 @@ int parse_hvcC(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4

for (unsigned j = 0; j < track->hvcC->numOfArrays; j++)
{
/*
array_completeness = (bool *)malloc(track->hvcC->numOfArrays);
NAL_unit_type = (uint8_t *)malloc(track->hvcC->numOfArrays);
numNalus = (uint16_t *)malloc(track->hvcC->numOfArrays);
Expand Down Expand Up @@ -1399,8 +1400,9 @@ int parse_hvcC(Bitstream_t *bitstr, Mp4Box_t *box_header, Mp4Track_t *track, Mp4
{
retcode = FAILURE;
}
}
*/
}

#if ENABLE_DEBUG
TRACE_1(MP4, "> configurationVersion : %u", track->hvcC->configurationVersion);
TRACE_1(MP4, "> general_profile_space: %u", track->hvcC->general_profile_space);
Expand Down

0 comments on commit 35504a4

Please sign in to comment.