Skip to content

Commit 600ec26

Browse files
committed
add a helper function to get sample entry type more easily
1 parent e4506e7 commit 600ec26

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

IsoLib/libisomediafile/src/MP4Movies.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,33 @@ MP4GetMovieIndTrack(MP4Movie theMovie, u32 trackIndex, MP4Track *outTrack)
791791
return err;
792792
}
793793

794+
MP4_EXTERN(MP4Err)
795+
MP4GetMovieIndTrackSampleEntryType(MP4Movie theMovie, u32 idx, u32* SEType)
796+
{
797+
MP4Err err;
798+
MP4Track trak;
799+
MP4TrackReader reader;
800+
MP4Handle sampleEntryH;
801+
802+
MP4NewHandle(0, &sampleEntryH);
803+
804+
err = MP4GetMovieIndTrack(theMovie, idx, &trak);
805+
if(err) goto bail;
806+
807+
err = MP4CreateTrackReader(trak, &reader);
808+
if(err) goto bail;
809+
810+
err = MP4TrackReaderGetCurrentSampleDescription(reader, sampleEntryH);
811+
if(err) goto bail;
812+
813+
err = ISOGetSampleDescriptionType(sampleEntryH, SEType);
814+
815+
bail:
816+
TEST_RETURN(err);
817+
MP4DisposeHandle(sampleEntryH);
818+
return err;
819+
}
820+
794821
MP4_EXTERN(MP4Err)
795822
MP4GetMovieTrack(MP4Movie theMovie, u32 trackID, MP4Track *outTrack)
796823
{

IsoLib/libisomediafile/src/MP4Movies.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,15 @@ extern "C"
745745
* @return MP4Err error code
746746
*/
747747
MP4_EXTERN(MP4Err) MP4GetMovieIndTrack(MP4Movie theMovie, u32 trackIndex, MP4Track *outTrack);
748+
/**
749+
* @brief Get sample entry type of a track.
750+
*
751+
* @note This function only returns the first sample entry type.
752+
* @param theMovie input movie object
753+
* @param idx index of the track ranges between 1 and the number of tracks in theMovie.
754+
* @param SEType [out] sample entry type (4CC)
755+
*/
756+
MP4_EXTERN(MP4Err) MP4GetMovieIndTrackSampleEntryType(MP4Movie theMovie, u32 idx, u32* SEType);
748757

749758
/*
750759
MP4_EXTERN ( MP4Err )

test/test_01_simple.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include <catch.hpp>
2424
#include <ISOMovies.h>
25+
#include <MP4Atoms.h>
2526
#include "testdataPath.h"
2627

2728
#include <string>
@@ -118,6 +119,30 @@ TEST_CASE("01_simple.mp4")
118119
CHECK(err == MP4NoErr);
119120
CHECK(uiTrackCnt == 4);
120121

122+
for(uint32_t i=1; i<=uiTrackCnt; i++)
123+
{
124+
uint32_t type = 0;
125+
err = MP4GetMovieIndTrackSampleEntryType(cMovieBox, i, &type);
126+
CHECK(err == MP4NoErr);
127+
switch (i)
128+
{
129+
case 1:
130+
CHECK(type == MP4MPEGSampleEntryAtomType);
131+
break;
132+
case 2:
133+
CHECK(type == MP4MPEGSampleEntryAtomType);
134+
break;
135+
case 3:
136+
CHECK(type == MP4VisualSampleEntryAtomType);
137+
break;
138+
case 4:
139+
CHECK(type == MP4AudioSampleEntryAtomType);
140+
break;
141+
default:
142+
break;
143+
}
144+
}
145+
121146
// ISOGetTrackEnabled
122147
u32 outEnabled;
123148
ISOGetMovieTrack(cMovieBox, 101, &audioTrack);

0 commit comments

Comments
 (0)