Boxed updates
This commit is contained in:
		
							parent
							
								
									0fcc1c483d
								
							
						
					
					
						commit
						4738624b3e
					
				
					 17 changed files with 269 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
SRC = main.cpp box.cpp box_h264.cpp box_stsd.cpp
 | 
			
		||||
SRC = box.cpp box_ftyp.cpp box_h264.cpp box_stbl.cpp box_stco.cpp box_stsc.cpp box_stsd.cpp box_stts.cpp box_url.cpp box_dref.cpp box_dinf.cpp box_minf.cpp main.cpp
 | 
			
		||||
OBJ = $(SRC:.cpp=.o)
 | 
			
		||||
OUT = Boxtest
 | 
			
		||||
INCLUDES = 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								MP4/box.cpp
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								MP4/box.cpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -65,6 +65,19 @@ uint8_t * Box::GetPayload(uint32_t Index, uint32_t & Size) {
 | 
			
		|||
  return temp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t Box::GetBoxedDataSize() {
 | 
			
		||||
  return header.TotalSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t * Box::GetBoxedData( ) {
 | 
			
		||||
  uint8_t * temp = new uint8_t[header.TotalSize];
 | 
			
		||||
  memcpy( temp, uint32_to_uint8(header.TotalSize), 4 );
 | 
			
		||||
  memcpy( &temp[4], uint32_to_uint8(header.BoxType), 4 );
 | 
			
		||||
  memcpy( &temp[8], Payload, PayloadSize );
 | 
			
		||||
  return temp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint8_t * Box::uint32_to_uint8( uint32_t data ) {
 | 
			
		||||
  uint8_t * temp = new uint8_t[4];
 | 
			
		||||
  temp[0] = (data >> 24) & 0x000000FF;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,9 @@ class Box {
 | 
			
		|||
    uint8_t * GetPayload();
 | 
			
		||||
    uint8_t * GetPayload(uint32_t Index, uint32_t & Size);
 | 
			
		||||
 | 
			
		||||
    uint32_t GetBoxedDataSize();
 | 
			
		||||
    uint8_t * GetBoxedData( );
 | 
			
		||||
 | 
			
		||||
    static uint8_t * uint32_to_uint8( uint32_t data );
 | 
			
		||||
    static uint8_t * uint16_to_uint8( uint16_t data );
 | 
			
		||||
    BoxHeader GetHeader( );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										29
									
								
								MP4/box_dinf.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								MP4/box_dinf.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#include "box_dinf.h"
 | 
			
		||||
 | 
			
		||||
Box_dinf::Box_dinf( ) {
 | 
			
		||||
  Container = new Box( 0x64696E66 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_dinf::~Box_dinf() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box * Box_dinf::GetBox() {
 | 
			
		||||
  return Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_dinf::AddContent( Box * newcontent, uint32_t offset ) {
 | 
			
		||||
  if(Content) {
 | 
			
		||||
    delete Content;
 | 
			
		||||
    Content = NULL;
 | 
			
		||||
  }
 | 
			
		||||
  Content = newcontent;
 | 
			
		||||
  WriteContent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_dinf::WriteContent( ) {
 | 
			
		||||
  Container->ResetPayload( );
 | 
			
		||||
  std::string serializedbox = "";
 | 
			
		||||
  serializedbox.append((char*)Content->GetBoxedData(),Content->GetBoxedDataSize());
 | 
			
		||||
  Container->SetPayload((uint32_t)serializedbox.size(),(uint8_t*)serializedbox.c_str());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								MP4/box_dinf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								MP4/box_dinf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#include "box.h"
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
class Box_dinf {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_dinf();
 | 
			
		||||
    ~Box_dinf();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
    void AddContent( Box * newcontent, uint32_t offset = 0 );
 | 
			
		||||
  private:
 | 
			
		||||
    Box * Container;
 | 
			
		||||
 | 
			
		||||
    void WriteContent( );
 | 
			
		||||
    Box * Content;
 | 
			
		||||
};//Box_ftyp Class
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								MP4/box_dref.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								MP4/box_dref.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
#include "box_dref.h"
 | 
			
		||||
 | 
			
		||||
Box_dref::Box_dref( ) {
 | 
			
		||||
  Container = new Box( 0x64726566 );
 | 
			
		||||
  SetReserved( );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_dref::~Box_dref() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box * Box_dref::GetBox() {
 | 
			
		||||
  return Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_dref::AddContent( Box * newcontent, uint32_t offset ) {
 | 
			
		||||
  if( offset >= Content.size() ) {
 | 
			
		||||
    Content.resize(offset+1);
 | 
			
		||||
  }
 | 
			
		||||
  if( Content[offset] ) {
 | 
			
		||||
    delete Content[offset];
 | 
			
		||||
  }
 | 
			
		||||
  Content[offset] = newcontent;
 | 
			
		||||
  WriteContent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_dref::WriteContent( ) {
 | 
			
		||||
  Container->ResetPayload( );
 | 
			
		||||
  Box * current;
 | 
			
		||||
  std::string serializedbox = "";
 | 
			
		||||
  for( uint32_t i = 0; i < Content.size(); i++ ) {
 | 
			
		||||
    current=Content[i];
 | 
			
		||||
    if( current ) {
 | 
			
		||||
      serializedbox.append((char*)current->GetBoxedData(),current->GetBoxedDataSize());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)serializedbox.size(),(uint8_t*)serializedbox.c_str(),4);
 | 
			
		||||
  SetReserved( );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_dref::SetReserved( ) {
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								MP4/box_dref.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								MP4/box_dref.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#include "box.h"
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
class Box_dref {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_dref();
 | 
			
		||||
    ~Box_dref();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
    void AddContent( Box * newcontent, uint32_t offset = 0 );
 | 
			
		||||
  private:
 | 
			
		||||
    Box * Container;
 | 
			
		||||
 | 
			
		||||
    void SetReserved( );
 | 
			
		||||
    void WriteContent( );
 | 
			
		||||
    std::vector<Box *> Content;
 | 
			
		||||
};//Box_ftyp Class
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								MP4/box_minf.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								MP4/box_minf.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
#include "box_minf.h"
 | 
			
		||||
 | 
			
		||||
Box_minf::Box_minf( ) {
 | 
			
		||||
  Container = new Box( 0x7374626C );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_minf::~Box_minf() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box * Box_minf::GetBox() {
 | 
			
		||||
  return Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_minf::AddContent( Box * newcontent, uint32_t offset ) {
 | 
			
		||||
  if( offset >= Content.size() ) {
 | 
			
		||||
    Content.resize(offset+1);
 | 
			
		||||
  }
 | 
			
		||||
  if( Content[offset] ) {
 | 
			
		||||
    delete Content[offset];
 | 
			
		||||
  }
 | 
			
		||||
  Content[offset] = newcontent;
 | 
			
		||||
  WriteContent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_minf::WriteContent( ) {
 | 
			
		||||
  Container->ResetPayload( );
 | 
			
		||||
  Box * current;
 | 
			
		||||
  std::string serializedbox = "";
 | 
			
		||||
  for( uint32_t i = 0; i < Content.size(); i++ ) {
 | 
			
		||||
    current=Content[i];
 | 
			
		||||
    if( current ) {
 | 
			
		||||
      serializedbox.append((char*)current->GetBoxedData(),current->GetBoxedDataSize());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)serializedbox.size(),(uint8_t*)serializedbox.c_str());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								MP4/box_minf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								MP4/box_minf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#include "box.h"
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
class Box_minf {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_minf();
 | 
			
		||||
    ~Box_minf();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
    void AddContent( Box * newcontent, uint32_t offset = 0 );
 | 
			
		||||
  private:
 | 
			
		||||
    Box * Container;
 | 
			
		||||
 | 
			
		||||
    void WriteContent( );
 | 
			
		||||
    std::vector<Box *> Content;
 | 
			
		||||
};//Box_ftyp Class
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								MP4/box_stbl.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								MP4/box_stbl.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
#include "box_stbl.h"
 | 
			
		||||
 | 
			
		||||
Box_stbl::Box_stbl( ) {
 | 
			
		||||
  Container = new Box( 0x7374626C );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_stbl::~Box_stbl() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box * Box_stbl::GetBox() {
 | 
			
		||||
  return Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_stbl::AddContent( Box * newcontent, uint32_t offset ) {
 | 
			
		||||
  if( offset >= Content.size() ) {
 | 
			
		||||
    Content.resize(offset+1);
 | 
			
		||||
  }
 | 
			
		||||
  if( Content[offset] ) {
 | 
			
		||||
    delete Content[offset];
 | 
			
		||||
  }
 | 
			
		||||
  Content[offset] = newcontent;
 | 
			
		||||
  WriteContent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_stbl::WriteContent( ) {
 | 
			
		||||
  Container->ResetPayload( );
 | 
			
		||||
  Box * current;
 | 
			
		||||
  std::string serializedbox = "";
 | 
			
		||||
  for( uint32_t i = 0; i < Content.size(); i++ ) {
 | 
			
		||||
    current=Content[i];
 | 
			
		||||
    if( current ) {
 | 
			
		||||
      serializedbox.append((char*)current->GetBoxedData(),current->GetBoxedDataSize());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)serializedbox.size(),(uint8_t*)serializedbox.c_str());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								MP4/box_stbl.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								MP4/box_stbl.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#include "box.h"
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
class Box_stbl {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_stbl();
 | 
			
		||||
    ~Box_stbl();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
    void AddContent( Box * newcontent, uint32_t offset = 0 );
 | 
			
		||||
  private:
 | 
			
		||||
    Box * Container;
 | 
			
		||||
 | 
			
		||||
    void WriteContent( );
 | 
			
		||||
    std::vector<Box *> Content;
 | 
			
		||||
};//Box_ftyp Class
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ void Box_stsc::SetReserved( ) {
 | 
			
		|||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_stsc::AddEntry( uint32_t FirstChunk, uint32_t SamplesPerChunk, uint32_t SampleDescIndex, uint32_t Offset = 0 ) {
 | 
			
		||||
void Box_stsc::AddEntry( uint32_t FirstChunk, uint32_t SamplesPerChunk, uint32_t SampleDescIndex, uint32_t Offset ) {
 | 
			
		||||
  if(Offset >= Entries.size()) {
 | 
			
		||||
    Entries.resize(Offset+1);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -31,12 +31,12 @@ void Box_stsc::AddEntry( uint32_t FirstChunk, uint32_t SamplesPerChunk, uint32_t
 | 
			
		|||
void Box_stsc::WriteEntries( ) {
 | 
			
		||||
  Container->ResetPayload();
 | 
			
		||||
  SetReserved( );
 | 
			
		||||
  if(!Offsets.empty()) {
 | 
			
		||||
    for(int32_t i = Offsets.size() -1; i >= 0; i--) {
 | 
			
		||||
  if(!Entries.empty()) {
 | 
			
		||||
    for(int32_t i = Entries.size() -1; i >= 0; i--) {
 | 
			
		||||
      Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries[i].SampleDescIndex),(i*12)+16);
 | 
			
		||||
      Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries[i].SamplesPerChunk),(i*12)+12);
 | 
			
		||||
      Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries[i].FirstChunk),(i*12)+8);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Offsets.size()),4);
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries.size()),4);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,15 +33,11 @@ void Box_stsd::WriteContent( ) {
 | 
			
		|||
  Container->ResetPayload( );
 | 
			
		||||
  SetDefaults( );
 | 
			
		||||
  Box * current;
 | 
			
		||||
  BoxHeader currentheader;
 | 
			
		||||
  std::string serializedbox = "";
 | 
			
		||||
  for( uint32_t i = 0; i < Content.size(); i++ ) {
 | 
			
		||||
    current=Content[i];
 | 
			
		||||
    if( current ) {
 | 
			
		||||
      currentheader = current->GetHeader();
 | 
			
		||||
      serializedbox.append((char*)Box::uint32_to_uint8(currentheader.TotalSize),4);
 | 
			
		||||
      serializedbox.append((char*)Box::uint32_to_uint8(currentheader.BoxType),4);
 | 
			
		||||
      serializedbox.append((char*)current->GetPayload(),current->GetPayloadSize());
 | 
			
		||||
      serializedbox.append((char*)current->GetBoxedData(),current->GetBoxedDataSize());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)serializedbox.size(),(uint8_t*)serializedbox.c_str(),8);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ Box_stts::Box_stts( ) {
 | 
			
		|||
  SetReserved();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_stts::~Box_stsc() {
 | 
			
		||||
Box_stts::~Box_stts() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ void Box_stts::SetReserved( ) {
 | 
			
		|||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Box_stts::AddEntry( uint32_t SampleCount, uint32_t SamplesDelta, uint32_t Offset = 0 ) {
 | 
			
		||||
void Box_stts::AddEntry( uint32_t SampleCount, uint32_t SampleDelta, uint32_t Offset ) {
 | 
			
		||||
  if(Offset >= Entries.size()) {
 | 
			
		||||
    Entries.resize(Offset+1);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +30,11 @@ void Box_stts::AddEntry( uint32_t SampleCount, uint32_t SamplesDelta, uint32_t O
 | 
			
		|||
void Box_stts::WriteEntries( ) {
 | 
			
		||||
  Container->ResetPayload();
 | 
			
		||||
  SetReserved( );
 | 
			
		||||
  if(!Offsets.empty()) {
 | 
			
		||||
    for(int32_t i = Offsets.size() -1; i >= 0; i--) {
 | 
			
		||||
  if(!Entries.empty()) {
 | 
			
		||||
    for(int32_t i = Entries.size() -1; i >= 0; i--) {
 | 
			
		||||
      Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries[i].SampleDelta),(i*8)+12);
 | 
			
		||||
      Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries[i].SampleCount),(i*8)+8);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Offsets.size()),4);
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Entries.size()),4);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,8 @@ struct stts_record {
 | 
			
		|||
 | 
			
		||||
class Box_stts {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_stsc( );
 | 
			
		||||
    ~Box_stsc();
 | 
			
		||||
    Box_stts( );
 | 
			
		||||
    ~Box_stts();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
    void SetReserved( );
 | 
			
		||||
    void AddEntry( uint32_t SampleCount, uint32_t SampleDelta, uint32_t Offset = 0 );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								MP4/box_url.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								MP4/box_url.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#include "box_url.h"
 | 
			
		||||
 | 
			
		||||
Box_url::Box_url( ) {
 | 
			
		||||
  Container = new Box( 0x75726C20 );
 | 
			
		||||
  Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box_url::~Box_url() {
 | 
			
		||||
  delete Container;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Box * Box_url::GetBox() {
 | 
			
		||||
  return Container;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								MP4/box_url.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								MP4/box_url.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
#include "box.h"
 | 
			
		||||
 | 
			
		||||
class Box_url {
 | 
			
		||||
  public:
 | 
			
		||||
    Box_url( );
 | 
			
		||||
    ~Box_url();
 | 
			
		||||
    Box * GetBox();
 | 
			
		||||
  private:
 | 
			
		||||
    Box * Container;
 | 
			
		||||
};//Box_ftyp Class
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue