diff --git a/Source/C++/Apps/Mp4Ls/Mp4Ls.cpp b/Source/C++/Apps/Mp4Ls/Mp4Ls.cpp new file mode 100644 index 00000000..b698f108 --- /dev/null +++ b/Source/C++/Apps/Mp4Ls/Mp4Ls.cpp @@ -0,0 +1,137 @@ +/***************************************************************** +| +| AP4 - MP4 Atom List +| +| Copyright 2002-2022 Axiomatic Systems, LLC +| +| +| This file is part of Bento4/AP4 (MP4 Atom Processing Library). +| +| Unless you have obtained Bento4 under a difference license, +| this version of Bento4 is Bento4|GPL. +| Bento4|GPL is free software; you can redistribute it and/or modify +| it under the terms of the GNU General Public License as published by +| the Free Software Foundation; either version 2, or (at your option) +| any later version. +| +| Bento4|GPL is distributed in the hope that it will be useful, +| but WITHOUT ANY WARRANTY; without even the implied warranty of +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +| GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License +| along with Bento4|GPL; see the file COPYING. If not, write to the +| Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +| 02111-1307, USA. +| + ****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include +#include +#include +#include + +#include "Ap4.h" + +/*---------------------------------------------------------------------- +| constants ++---------------------------------------------------------------------*/ +#define BANNER "MP4 Atom List - Version 1.0\n"\ + "(Bento4 Version " AP4_VERSION_STRING ")\n"\ + "(c) 2002-2022 Axiomatic Systems, LLC" + +/*---------------------------------------------------------------------- +| PrintUsageAndExit ++---------------------------------------------------------------------*/ +static void +PrintUsageAndExit() +{ + fprintf(stderr, + BANNER + "\n\nusage: mp4ls \n"); + exit(1); +} + + +static void +PrintAtom(AP4_Atom* atom, std::string& path) +{ + char type[5]; + AP4_FormatFourChars(type, atom->GetType()); + std::string new_path = path + ((path.empty()) ? "" : "/") + type; + + AP4_AtomParent* parent = AP4_DYNAMIC_CAST(AP4_ContainerAtom, atom); + if (parent != NULL){ + AP4_List& children = parent->GetChildren(); + AP4_Cardinal n_children = children.ItemCount(); + for (int i=0; iRelease(); + + // list the atoms + AP4_List& children = top_level.GetChildren(); + AP4_Cardinal n_children = children.ItemCount(); + std::string path; + for (int i=0; i