OSDN Git Service

LinGui: reposition the presets frame below toolbar
[handbrake-jp/handbrake-jp-git.git] / contrib / patch-mpeg4ip.patch
index 8a55c5d..75f8bbf 100644 (file)
-diff -Naur mpeg4ip/lib/mp4v2/atom_tkhd.cpp mpeg4ip_patched/lib/mp4v2/atom_tkhd.cpp
---- mpeg4ip/lib/mp4v2/atom_tkhd.cpp    2003-11-19 23:46:11.000000000 +0000
-+++ mpeg4ip_patched/lib/mp4v2/atom_tkhd.cpp    2007-02-15 15:58:06.000000000 +0000
-@@ -61,7 +61,8 @@
+diff -Naur mpeg4ip/bootstrap mpeg4ip-patched/bootstrap
+--- mpeg4ip/bootstrap  2005-10-13 16:09:41.000000000 -0400
++++ mpeg4ip-patched/bootstrap  2008-01-17 12:05:42.000000000 -0500
+@@ -47,9 +47,9 @@
+ #
+ if test $target_system = "Linux"; then
+     have_faac=no
+-    if which faac >/dev/null 2>/dev/null; then
+-      have_faac=yes
+-    fi
++#    if which faac >/dev/null 2>/dev/null; then
++#     have_faac=yes
++#    fi
+     if test $have_faac = "yes"; then
+       # we have lame and faac - see if faac is built with mp4 support
+diff -Naur mpeg4ip/lib/mp4v2/Makefile.am mpeg4ip-patched/lib/mp4v2/Makefile.am
+--- mpeg4ip/lib/mp4v2/Makefile.am      2005-03-10 13:31:34.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/Makefile.am      2008-01-17 12:09:56.000000000 -0500
+@@ -21,6 +21,7 @@
+       atom_encv.cpp \
+       atom_free.cpp \
+       atom_ftyp.cpp \
++      atom_gmin.cpp \
+       atom_hdlr.cpp \
+       atom_hinf.cpp \
+       atom_hnti.cpp \
+@@ -32,6 +33,7 @@
+       atom_mp4s.cpp \
+       atom_mp4v.cpp \
+       atom_mvhd.cpp \
++      atom_pasp.cpp \
+       atom_root.cpp \
+       atom_rtp.cpp \
+       atom_s263.cpp \
+@@ -45,6 +47,7 @@
+       atom_stsc.cpp \
+       atom_stsd.cpp \
+       atom_stsz.cpp \
++      atom_text.cpp \
+       atom_tfhd.cpp \
+       atom_tkhd.cpp \
+       atom_treftype.cpp \
+diff -Naur mpeg4ip/lib/mp4v2/Makefile.in mpeg4ip-patched/lib/mp4v2/Makefile.in
+--- mpeg4ip/lib/mp4v2/Makefile.in      2005-05-18 18:03:05.000000000 -0400
++++ mpeg4ip-patched/lib/mp4v2/Makefile.in      2008-01-17 12:04:09.000000000 -0500
+@@ -55,6 +55,7 @@
+ am_libmp4v2_la_OBJECTS = 3gp.lo atom_amr.lo atom_avc1.lo atom_avcC.lo \
+       atom_d263.lo atom_damr.lo atom_dref.lo atom_elst.lo \
+       atom_enca.lo atom_encv.lo atom_free.lo atom_ftyp.lo \
++      atom_gmin.lo atom_text.lo \
+       atom_hdlr.lo atom_hinf.lo atom_hnti.lo atom_href.lo \
+       atom_mdat.lo atom_mdhd.lo atom_meta.lo atom_mp4a.lo \
+       atom_mp4s.lo atom_mp4v.lo atom_mvhd.lo atom_root.lo \
+@@ -82,6 +83,7 @@
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_encv.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_free.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_ftyp.Plo \
++@AMDEP_TRUE@  ./$(DEPDIR)/atom_gmin.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_hdlr.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_hinf.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_hnti.Plo \
+@@ -103,6 +105,7 @@
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_stsc.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_stsd.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_stsz.Plo \
++@AMDEP_TRUE@  ./$(DEPDIR)/atom_text.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_tfhd.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_tkhd.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_treftype.Plo \
+@@ -349,6 +352,7 @@
+       atom_encv.cpp \
+       atom_free.cpp \
+       atom_ftyp.cpp \
++      atom_gmin.cpp \
+       atom_hdlr.cpp \
+       atom_hinf.cpp \
+       atom_hnti.cpp \
+@@ -373,6 +377,7 @@
+       atom_stsc.cpp \
+       atom_stsd.cpp \
+       atom_stsz.cpp \
++      atom_text.cpp \
+       atom_tfhd.cpp \
+       atom_tkhd.cpp \
+       atom_treftype.cpp \
+@@ -501,6 +506,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_encv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_free.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_ftyp.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_gmin.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_hdlr.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_hinf.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_hnti.Plo@am__quote@
+@@ -524,6 +530,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_stsc.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_stsd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_stsz.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_text.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_tfhd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_tkhd.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_treftype.Plo@am__quote@
+diff -Naur mpeg4ip/lib/mp4v2/atom_avc1.cpp mpeg4ip-patched/lib/mp4v2/atom_avc1.cpp
+--- mpeg4ip/lib/mp4v2/atom_avc1.cpp    2004-07-13 17:07:50.000000000 -0400
++++ mpeg4ip-patched/lib/mp4v2/atom_avc1.cpp    2008-01-17 12:07:00.000000000 -0500
+@@ -41,7 +41,7 @@
+       MP4StringProperty* pProp = 
+               new MP4StringProperty("compressorName");
+       pProp->SetFixedLength(32);
+-      pProp->SetValue("AVC Coding");
++      pProp->SetValue("");
+       AddProperty(pProp); /* 6 */
+       AddReserved("reserved4", 4); /* 7 */
+diff -Naur mpeg4ip/lib/mp4v2/atom_gmin.cpp mpeg4ip-patched/lib/mp4v2/atom_gmin.cpp
+--- mpeg4ip/lib/mp4v2/atom_gmin.cpp    1969-12-31 19:00:00.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/atom_gmin.cpp    2008-01-17 12:04:09.000000000 -0500
+@@ -0,0 +1,51 @@
++/*
++ * The contents of this file are subject to the Mozilla Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/MPL/
++ * 
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ * 
++ * The Original Code is MPEG4IP.
++ * 
++ * The Initial Developer of the Original Code is Cisco Systems Inc.
++ * Portions created by Cisco Systems Inc. are
++ * Copyright (C) Cisco Systems Inc. 2001.  All Rights Reserved.
++ * 
++ * Contributor(s): 
++ *            Dave Mackie             dmackie@cisco.com
++ */
++
++#include "mp4common.h"
++
++MP4GminAtom::MP4GminAtom() 
++      : MP4Atom("gmin") 
++{
++
++      AddVersionAndFlags(); /* 0, 1 */
++
++      AddProperty(new MP4Integer16Property("graphicsMode")); /* 2 */
++      AddProperty(new MP4Integer16Property("opColorRed")); /* 3 */
++      AddProperty(new MP4Integer16Property("opColorGreen")); /* 4 */
++      AddProperty(new MP4Integer16Property("opColorBlue")); /* 5 */
++      AddProperty(new MP4Integer16Property("balance")); /* 6 */
++      AddReserved("reserved", 2); /* 7 */
++
++}
++
++void MP4GminAtom::Generate()
++{
++
++      MP4Atom::Generate();
++
++      ((MP4Integer16Property*)m_pProperties[2])->SetValue(0x0040);
++      ((MP4Integer16Property*)m_pProperties[3])->SetValue(0x8000);
++      ((MP4Integer16Property*)m_pProperties[4])->SetValue(0x8000);
++      ((MP4Integer16Property*)m_pProperties[5])->SetValue(0x8000);
++      ((MP4Integer16Property*)m_pProperties[6])->SetValue(0x0000);
++
++}
++
+diff -Naur mpeg4ip/lib/mp4v2/atom_mp4a.cpp mpeg4ip-patched/lib/mp4v2/atom_mp4a.cpp
+--- mpeg4ip/lib/mp4v2/atom_mp4a.cpp    2001-10-02 17:15:39.000000000 -0400
++++ mpeg4ip-patched/lib/mp4v2/atom_mp4a.cpp    2008-01-17 12:04:09.000000000 -0500
+@@ -29,7 +29,10 @@
+       AddProperty( /* 1 */
+               new MP4Integer16Property("dataReferenceIndex"));
+-      AddReserved("reserved2", 16); /* 2 */
++      /* patched by saintdev to allow us to set correct audio information */
++//    AddReserved("reserved2", 16); /* 2 */
++      AddProperty( /* 2 */
++              new MP4BytesProperty("reserved2", 16));
+       AddProperty( /* 3 */
+               new MP4Integer16Property("timeScale"));
+@@ -55,5 +58,6 @@
+       m_pProperties[2]->SetReadOnly(false);
+       ((MP4BytesProperty*)m_pProperties[2])->
+               SetValue(reserved2, sizeof(reserved2));
+-      m_pProperties[2]->SetReadOnly(true);
++      /* patched by saintdev to allow us to set correct audio information */
++//    m_pProperties[2]->SetReadOnly(true);
+ }
+diff -Naur mpeg4ip/lib/mp4v2/atom_standard.cpp mpeg4ip-patched/lib/mp4v2/atom_standard.cpp
+--- mpeg4ip/lib/mp4v2/atom_standard.cpp        2004-12-14 16:35:35.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/atom_standard.cpp        2008-01-17 12:04:09.000000000 -0500
+@@ -138,6 +138,11 @@
+   /*
+    * g???
+    */
++  } else if (ATOMID(type) == ATOMID("gmhd")) { 
++    ExpectChildAtom("gmin", Required, OnlyOne);
++    ExpectChildAtom("tmcd", Optional, OnlyOne);
++    ExpectChildAtom("text", Optional, OnlyOne);
++
+   } else if (ATOMID(type) == ATOMID("gnre")) { // Apple iTunes 
+     ExpectChildAtom("data", Optional, OnlyOne);
+@@ -221,6 +226,7 @@
+     ExpectChildAtom("smhd", Optional, OnlyOne);
+     ExpectChildAtom("hmhd", Optional, OnlyOne);
+     ExpectChildAtom("nmhd", Optional, OnlyOne);
++    ExpectChildAtom("gmhd", Optional, OnlyOne);
+     ExpectChildAtom("dinf", Required, OnlyOne);
+     ExpectChildAtom("stbl", Required, OnlyOne);
+@@ -366,6 +372,7 @@
+     ExpectChildAtom("ipir", Optional, OnlyOne);
+     ExpectChildAtom("mpod", Optional, OnlyOne);
+     ExpectChildAtom("sync", Optional, OnlyOne);
++    ExpectChildAtom("chap", Optional, OnlyOne);
+   } else if (ATOMID(type) == ATOMID("trex")) {
+     AddVersionAndFlags();     /* 0, 1 */
+diff -Naur mpeg4ip/lib/mp4v2/atom_stsd.cpp mpeg4ip-patched/lib/mp4v2/atom_stsd.cpp
+--- mpeg4ip/lib/mp4v2/atom_stsd.cpp    2004-07-13 17:07:50.000000000 -0400
++++ mpeg4ip-patched/lib/mp4v2/atom_stsd.cpp    2008-01-17 12:07:00.000000000 -0500
+@@ -49,6 +49,8 @@
+       ExpectChildAtom("sawb", Optional, Many); // For AMR-WB
+       ExpectChildAtom("s263", Optional, Many); // For H.263
+       ExpectChildAtom("avc1", Optional, Many);
++      ExpectChildAtom("text", Optional, Many);
++      ExpectChildAtom("pasp", Optional, Many);
+ }
+ void MP4StsdAtom::Read() 
+diff -Naur mpeg4ip/lib/mp4v2/atom_text.cpp mpeg4ip-patched/lib/mp4v2/atom_text.cpp
+--- mpeg4ip/lib/mp4v2/atom_text.cpp    1969-12-31 19:00:00.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/atom_text.cpp    2008-01-17 12:04:09.000000000 -0500
+@@ -0,0 +1,132 @@
++/*
++ * The contents of this file are subject to the Mozilla Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/MPL/
++ * 
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ * 
++ * The Original Code is MPEG4IP.
++ * 
++ * The Initial Developer of the Original Code is Cisco Systems Inc.
++ * Portions created by Cisco Systems Inc. are
++ * Copyright (C) Cisco Systems Inc. 2001.  All Rights Reserved.
++ * 
++ * Contributor(s): 
++ *            Dave Mackie             dmackie@cisco.com
++ */
++
++#include "mp4common.h"
++
++MP4TextAtom::MP4TextAtom() 
++      : MP4Atom("text") 
++{
++      // The atom type "text" is used in two complete unrelated ways
++      // i.e. it's real two atoms with the same name
++      // To handle that we need to postpone property creation until
++      // we know who our parent atom is (stsd or gmhd) which gives us
++      // the context info we need to know who we are
++}
++
++void MP4TextAtom::AddPropertiesStsdType()
++{
++
++      AddReserved("reserved1", 6); /* 0 */
++
++      AddProperty(new MP4Integer16Property("dataReferenceIndex"));/* 1 */
++
++      AddProperty(new MP4Integer32Property("displayFlags")); /* 2 */
++      AddProperty(new MP4Integer32Property("textJustification")); /* 3 */
++
++      AddProperty(new MP4Integer16Property("bgColorRed")); /* 4 */
++      AddProperty(new MP4Integer16Property("bgColorGreen")); /* 5 */
++      AddProperty(new MP4Integer16Property("bgColorBlue")); /* 6 */
++
++      AddProperty(new MP4Integer16Property("defTextBoxTop")); /* 7 */
++      AddProperty(new MP4Integer16Property("defTextBoxLeft")); /* 8 */
++      AddProperty(new MP4Integer16Property("defTextBoxBottom")); /* 9 */
++      AddProperty(new MP4Integer16Property("defTextBoxRight")); /* 10 */
++
++      AddReserved("reserved2", 8); /* 11 */
++
++      AddProperty(new MP4Integer16Property("fontNumber")); /* 12 */
++      AddProperty(new MP4Integer16Property("fontFace")); /* 13 */
++
++      AddReserved("reserved3", 1); /* 14 */
++      AddReserved("reserved4", 2); /* 15 */
++
++      AddProperty(new MP4Integer16Property("foreColorRed")); /* 16 */
++      AddProperty(new MP4Integer16Property("foreColorGreen")); /* 17 */
++      AddProperty(new MP4Integer16Property("foreColorBlue")); /* 18 */
++
++}
++
++void MP4TextAtom::AddPropertiesGmhdType()
++{
++
++      AddProperty(new MP4BytesProperty("textData", 36)); /* 0 */
++
++}
++
++
++void MP4TextAtom::Generate()
++{
++
++      if (!strcmp(m_pParentAtom->GetType(), "stsd")) {
++              AddPropertiesStsdType();
++              GenerateStsdType();
++      } else if (!strcmp(m_pParentAtom->GetType(), "gmhd")) {
++              AddPropertiesGmhdType();
++              GenerateGmhdType();
++      } else {
++              VERBOSE_WARNING(m_pFile->GetVerbosity(),
++                      printf("Warning: text atom in unexpected context, can not generate"));
++      }
++
++}
++
++void MP4TextAtom::GenerateStsdType() 
++{
++      // generate children
++      MP4Atom::Generate();
++
++      ((MP4Integer16Property*)m_pProperties[1])->SetValue(1);
++
++      ((MP4Integer32Property*)m_pProperties[2])->SetValue(1);
++      ((MP4Integer32Property*)m_pProperties[3])->SetValue(1);
++
++}
++
++void MP4TextAtom::GenerateGmhdType() 
++{
++      MP4Atom::Generate();
++
++      // property 0 has non-zero fixed values
++      static u_int8_t textData[36] = {
++              0x00, 0x01, 
++              0x00, 0x00,
++              0x00, 0x00,
++              0x00, 0x00,
++              0x00, 0x00, 
++              0x00, 0x00,
++              0x00, 0x00, 
++              0x00, 0x00,
++              0x00, 0x01, 
++              0x00, 0x00,
++              0x00, 0x00, 
++              0x00, 0x00,
++              0x00, 0x00, 
++              0x00, 0x00,
++              0x00, 0x00, 
++              0x00, 0x00,
++              0x40, 0x00, 
++              0x00, 0x00, 
++      };
++      ((MP4BytesProperty*)m_pProperties[0])->SetValue(textData, sizeof(textData));
++      
++}
++
++
+diff -Naur mpeg4ip/lib/mp4v2/atom_tkhd.cpp mpeg4ip-patched/lib/mp4v2/atom_tkhd.cpp
+--- mpeg4ip/lib/mp4v2/atom_tkhd.cpp    2003-11-20 00:46:11.000000000 +0100
++++ mpeg4ip/lib/mp4v2/atom_tkhd.cpp    2008-01-19 12:41:13.000000000 +0100
+@@ -53,23 +53,29 @@
+                       new MP4Integer32Property("duration"));
+       }
+-      AddReserved("reserved2", 12); /* 7 */
+-
++      AddReserved("reserved2", 8); /* 7 */
++      
++      AddProperty( /* 8 */
++                      new MP4Integer16Property("layer"));
++      AddProperty( /* 9 */
++                      new MP4Integer16Property("alternate_group"));
++      
+       MP4Float32Property* pProp;
+       pProp = new MP4Float32Property("volume");
        pProp->SetFixed16Format();
-       AddProperty(pProp); /* 8 */
+-      AddProperty(pProp); /* 8 */
++      AddProperty(pProp); /* 10 */
  
 -      AddReserved("reserved3", 38); /* 9 */
 +      /* patched by maurj to enable us to set the matrix for anamorphic display */
-+      AddProperty(new MP4BytesProperty("reserved3", 38)); /* 9 */
++      AddProperty(new MP4BytesProperty("reserved3", 38)); /* 11 */
  
        pProp = new MP4Float32Property("width");
        pProp->SetFixed32Format();
-@@ -106,7 +107,8 @@
-       m_pProperties[9]->SetReadOnly(false);
-       ((MP4BytesProperty*)m_pProperties[9])->
+-      AddProperty(pProp); /* 10 */
++      AddProperty(pProp); /* 12 */
+       pProp = new MP4Float32Property("height");
+       pProp->SetFixed32Format();
+-      AddProperty(pProp); /* 11 */
++      AddProperty(pProp); /* 13 */
+ }
+ void MP4TkhdAtom::Generate() 
+@@ -103,10 +109,11 @@
+               0x00, 0x00, 0x00, 0x00, 
+               0x40, 0x00, 0x00, 0x00, 
+       };
+-      m_pProperties[9]->SetReadOnly(false);
+-      ((MP4BytesProperty*)m_pProperties[9])->
++      m_pProperties[11]->SetReadOnly(false);
++      ((MP4BytesProperty*)m_pProperties[11])->
                SetValue(reserved3, sizeof(reserved3));
 -      m_pProperties[9]->SetReadOnly(true);
 +      /* patched by maurj to enable us to set the matrix for anamorphic display */
 +      /* m_pProperties[9]->SetReadOnly(true);*/
  }
  
- void MP4TkhdAtom::Read() 
+ void MP4TkhdAtom::Read()
+diff -Naur mpeg4ip/lib/mp4v2/atoms.h mpeg4ip-patched/lib/mp4v2/atoms.h
+--- mpeg4ip/lib/mp4v2/atoms.h  2005-03-10 13:31:34.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/atoms.h  2008-01-17 12:07:00.000000000 -0500
+@@ -206,6 +206,12 @@
+       void Read();
+ };
++class MP4GminAtom : public MP4Atom {
++public:
++      MP4GminAtom();
++      void Generate();
++};
++
+ class MP4HdlrAtom : public MP4Atom {
+ public:
+       MP4HdlrAtom();
+@@ -327,6 +333,19 @@
+       void Write();
+ };
++class MP4TextAtom : public MP4Atom {
++public:
++      MP4TextAtom();
++      void Generate();
++
++protected:
++      void AddPropertiesStsdType();
++      void AddPropertiesGmhdType();
++
++      void GenerateStsdType();
++      void GenerateGmhdType();
++};
++
+ class MP4TfhdAtom : public MP4Atom {
+ public:
+       MP4TfhdAtom();
+@@ -374,4 +393,10 @@
+   void Generate(void);
+ };
++class MP4PaspAtom : public MP4Atom {
++ public:
++    MP4PaspAtom();
++    void Generate();
++};
++
+ #endif /* __MP4_ATOMS_INCLUDED__ */
+diff -Naur mpeg4ip/lib/mp4v2/libmp4v260.dsp mpeg4ip-patched/lib/mp4v2/libmp4v260.dsp
+--- mpeg4ip/lib/mp4v2/libmp4v260.dsp   2005-03-24 17:14:52.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/libmp4v260.dsp   2008-01-17 12:07:00.000000000 -0500
+@@ -134,6 +134,10 @@
+ # End Source File
+ # Begin Source File
++SOURCE=.\atom_gmin.cpp
++# End Source File
++# Begin Source File
++
+ SOURCE=.\atom_hdlr.cpp
+ # End Source File
+ # Begin Source File
+@@ -178,6 +182,10 @@
+ # End Source File
+ # Begin Source File
++SOURCE=.\atom_pasp.cpp
++# End Source File
++# Begin Source File
++
+ SOURCE=.\atom_root.cpp
+ # End Source File
+ # Begin Source File
+@@ -242,6 +250,10 @@
+ # End Source File
+ # Begin Source File
++SOURCE=.\atom_text.cpp
++# End Source File
++# Begin Source File
++
+ SOURCE=.\atom_udta.cpp
+ # End Source File
+ # Begin Source File
+diff -Naur mpeg4ip/lib/mp4v2/libmp4v2_st60.dsp mpeg4ip-patched/lib/mp4v2/libmp4v2_st60.dsp
+--- mpeg4ip/lib/mp4v2/libmp4v2_st60.dsp        2005-03-24 17:14:52.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/libmp4v2_st60.dsp        2008-01-17 12:04:09.000000000 -0500
+@@ -133,6 +133,10 @@
+ # End Source File
+ # Begin Source File
++SOURCE=.\atom_gmin.cpp
++# End Source File
++# Begin Source File
++
+ SOURCE=.\atom_hdlr.cpp
+ # End Source File
+ # Begin Source File
+@@ -241,6 +245,10 @@
+ # End Source File
+ # Begin Source File
++SOURCE=.\atom_text.cpp
++# End Source File
++# Begin Source File
++
+ SOURCE=.\atom_udta.cpp
+ # End Source File
+ # Begin Source File
+diff -Naur mpeg4ip/lib/mp4v2/mp4.cpp mpeg4ip-patched/lib/mp4v2/mp4.cpp
+--- mpeg4ip/lib/mp4v2/mp4.cpp  2005-03-30 13:41:58.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/mp4.cpp  2008-01-17 12:07:00.000000000 -0500
+@@ -939,6 +939,52 @@
+       return MP4_INVALID_TRACK_ID;
+ }
++extern "C" MP4TrackId MP4AddTextTrack(
++      MP4FileHandle hFile, MP4TrackId refTrackId)
++{
++      if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
++              try {
++                      return ((MP4File*)hFile)->AddTextTrack(refTrackId);
++              }
++              catch (MP4Error* e) {
++                      PRINT_ERROR(e);
++                      delete e;
++              }
++      }
++      return MP4_INVALID_TRACK_ID;
++}
++
++extern "C" MP4TrackId MP4AddChapterTextTrack(
++      MP4FileHandle hFile, MP4TrackId refTrackId)
++{
++      if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
++              try {
++                      return ((MP4File*)hFile)->AddChapterTextTrack(refTrackId);
++              }
++              catch (MP4Error* e) {
++                      PRINT_ERROR(e);
++                      delete e;
++              }
++      }
++      return MP4_INVALID_TRACK_ID;
++}
++
++extern "C" MP4TrackId MP4AddPixelAspectRatio(
++      MP4FileHandle hFile, MP4TrackId refTrackId, u_int32_t hSpacing, u_int32_t vSpacing)
++{
++      if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
++              try {
++                      return ((MP4File*)hFile)->AddPixelAspectRatio(refTrackId, hSpacing, vSpacing);
++              }
++              catch (MP4Error* e) {
++                      PRINT_ERROR(e);
++                      delete e;
++              }
++      }
++      return MP4_INVALID_TRACK_ID;
++}
++
++
+ extern "C" MP4TrackId MP4CloneTrack(
+       MP4FileHandle srcFile, 
+       MP4TrackId srcTrackId,
+diff -Naur mpeg4ip/lib/mp4v2/mp4.h mpeg4ip-patched/lib/mp4v2/mp4.h
+--- mpeg4ip/lib/mp4v2/mp4.h    2005-03-30 13:41:58.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/mp4.h    2008-01-17 12:07:00.000000000 -0500
+@@ -100,6 +100,7 @@
+ #define MP4_VIDEO_TRACK_TYPE  "vide"
+ #define MP4_HINT_TRACK_TYPE           "hint"
+ #define MP4_CNTL_TRACK_TYPE     "cntl"
++#define MP4_TEXT_TRACK_TYPE           "text"
+ /*
+  * This second set of track types should be created 
+  * via MP4AddSystemsTrack(type)
+@@ -538,6 +539,20 @@
+       MP4FileHandle hFile, 
+       MP4TrackId refTrackId);
++MP4TrackId MP4AddTextTrack(
++      MP4FileHandle hFile, 
++      MP4TrackId refTrackId);
++
++MP4TrackId MP4AddChapterTextTrack(
++      MP4FileHandle hFile, 
++      MP4TrackId refTrackId);
++
++MP4TrackId MP4AddPixelAspectRatio(
++      MP4FileHandle hFile, 
++      MP4TrackId refTrackId,
++    u_int32_t hSpacing,
++    u_int32_t vSpacing);
++
+ MP4TrackId MP4CloneTrack(
+       MP4FileHandle srcFile, 
+       MP4TrackId srcTrackId,
+diff -Naur mpeg4ip/lib/mp4v2/mp4atom.cpp mpeg4ip-patched/lib/mp4v2/mp4atom.cpp
+--- mpeg4ip/lib/mp4v2/mp4atom.cpp      2005-03-10 13:31:34.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/mp4atom.cpp      2008-01-17 12:11:40.000000000 -0500
+@@ -84,6 +84,13 @@
+       pAtom = new MP4SoundAtom("alaw");
+       }
+       break;
++
++    case 'c':
++      if (ATOMID(type) == ATOMID("chap")) {
++      pAtom = new MP4TrefTypeAtom(type);
++        }
++        break;
++
+     case 'd':
+       if (ATOMID(type) == ATOMID("d263")) {
+       pAtom = new MP4D263Atom();
+@@ -113,6 +120,11 @@
+       pAtom = new MP4FtypAtom();
+       }
+       break;
++    case 'g':
++      if (ATOMID(type) == ATOMID("gmin")) {
++      pAtom = new MP4GminAtom();
++      }
++      break;
+     case 'h':
+       if (ATOMID(type) == ATOMID("hdlr")) {
+       pAtom = new MP4HdlrAtom();
+@@ -200,7 +212,9 @@
+       }
+       break;
+     case 't':
+-      if (ATOMID(type) == ATOMID("tkhd")) {
++      if (ATOMID(type) == ATOMID("text")) {
++      pAtom = new MP4TextAtom();
++      } else if (ATOMID(type) == ATOMID("tkhd")) {
+       pAtom = new MP4TkhdAtom();
+       } else if (ATOMID(type) == ATOMID("tfhd")) {
+       pAtom = new MP4TfhdAtom();
+@@ -238,6 +252,12 @@
+       pAtom = new MP4SmiAtom();
+       }
+       break;
++     case 'p':
++         if (ATOMID(type) == ATOMID("pasp")) {
++      pAtom = new MP4PaspAtom();
++       }
++       break;
++    
+     }
+   }
+diff -Naur mpeg4ip/lib/mp4v2/mp4file.cpp mpeg4ip-patched/lib/mp4v2/mp4file.cpp
+--- mpeg4ip/lib/mp4v2/mp4file.cpp      2005-03-30 13:41:58.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/mp4file.cpp      2008-01-17 12:07:00.000000000 -0500
+@@ -1869,6 +1869,81 @@
+       return trackId;
+ }
++MP4TrackId MP4File::AddTextTrack(MP4TrackId refTrackId)
++{
++      // validate reference track id
++      FindTrackIndex(refTrackId);
++
++      MP4TrackId trackId = 
++              AddTrack(MP4_TEXT_TRACK_TYPE, GetTrackTimeScale(refTrackId));
++
++      InsertChildAtom(MakeTrackName(trackId, "mdia.minf"), "gmhd", 0);
++
++      AddChildAtom(MakeTrackName(trackId, "mdia.minf.stbl.stsd"), "text");
++
++      // stsd is a unique beast in that it has a count of the number 
++      // of child atoms that needs to be incremented after we add the text atom
++      MP4Integer32Property* pStsdCountProperty;
++      FindIntegerProperty(
++              MakeTrackName(trackId, "mdia.minf.stbl.stsd.entryCount"),
++              (MP4Property**)&pStsdCountProperty);
++      pStsdCountProperty->IncrementValue();
++
++      return trackId;
++}
++
++MP4TrackId MP4File::AddChapterTextTrack(MP4TrackId refTrackId)
++{
++      // validate reference track id
++      FindTrackIndex(refTrackId);
++
++      MP4TrackId trackId = 
++              AddTrack(MP4_TEXT_TRACK_TYPE, GetTrackTimeScale(refTrackId));
++
++      InsertChildAtom(MakeTrackName(trackId, "mdia.minf"), "gmhd", 0);
++
++      AddChildAtom(MakeTrackName(trackId, "mdia.minf.stbl.stsd"), "text");
++
++      // stsd is a unique beast in that it has a count of the number 
++      // of child atoms that needs to be incremented after we add the text atom
++      MP4Integer32Property* pStsdCountProperty;
++      FindIntegerProperty(
++              MakeTrackName(trackId, "mdia.minf.stbl.stsd.entryCount"),
++              (MP4Property**)&pStsdCountProperty);
++      pStsdCountProperty->IncrementValue();
++
++      /* add the magic "text" atom to the generic media header */
++      AddChildAtom(MakeTrackName(trackId, "mdia.minf.gmhd"), "text");
++
++      AddDescendantAtoms(MakeTrackName(refTrackId, NULL), "tref.chap");
++
++      AddTrackReference(MakeTrackName(refTrackId, "tref.chap"), trackId);
++
++      return trackId;
++}
++
++MP4TrackId MP4File::AddPixelAspectRatio(MP4TrackId trackId, u_int32_t hSpacing, u_int32_t vSpacing)
++{
++      // validate reference track id
++  (void)FindTrackIndex(trackId);
++    const char *format = GetTrackMediaDataName (trackId);
++    
++    if (!strcasecmp(format, "avc1"))
++    {
++           (void)AddChildAtom(MakeTrackName(trackId, "mdia.minf.stbl.stsd.avc1"), "pasp");
++            SetTrackIntegerProperty(trackId, "mdia.minf.stbl.stsd.avc1.pasp.hSpacing", hSpacing);
++            SetTrackIntegerProperty(trackId, "mdia.minf.stbl.stsd.avc1.pasp.vSpacing", vSpacing);
++    }
++    else if (!strcasecmp(format, "mp4v"))
++    {
++           (void)AddChildAtom(MakeTrackName(trackId, "mdia.minf.stbl.stsd.mp4v"), "pasp");
++            SetTrackIntegerProperty(trackId, "mdia.minf.stbl.stsd.mp4v.pasp.hSpacing", hSpacing);
++            SetTrackIntegerProperty(trackId, "mdia.minf.stbl.stsd.mp4v.pasp.vSpacing", vSpacing);
++    }
++
++      return trackId;
++}
++
+ void MP4File::DeleteTrack(MP4TrackId trackId)
+ {
+       ProtectWriteOperation("MP4DeleteTrack");
+diff -Naur mpeg4ip/lib/mp4v2/mp4file.h mpeg4ip-patched/lib/mp4v2/mp4file.h
+--- mpeg4ip/lib/mp4v2/mp4file.h        2005-03-30 13:41:58.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/mp4file.h        2008-01-17 12:07:00.000000000 -0500
+@@ -296,6 +296,10 @@
+                                       const uint8_t *pPicture,
+                                       uint16_t pictureLen);
+       MP4TrackId AddHintTrack(MP4TrackId refTrackId);
++      MP4TrackId AddTextTrack(MP4TrackId refTrackId);
++      MP4TrackId AddChapterTextTrack(MP4TrackId refTrackId);
++
++      MP4TrackId AddPixelAspectRatio(MP4TrackId trackId, u_int32_t hSpacing, u_int32_t vSpacing);
+       MP4SampleId GetTrackNumberOfSamples(MP4TrackId trackId);
+diff -Naur mpeg4ip/lib/mp4v2/atom_pasp.cpp mpeg4ip-patched/lib/mp4v2/atom_pasp.cpp
+--- mpeg4ip/lib/mp4v2/atom_pasp.cpp    1969-12-31 19:00:00.000000000 -0500
++++ mpeg4ip-patched/lib/mp4v2/atom_pasp.cpp    2008-01-17 12:07:00.000000000 -0500
+@@ -0,0 +1,42 @@
++/*
++ * The contents of this file are subject to the Mozilla Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/MPL/
++ * 
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ * 
++ * The Original Code is MPEG4IP.
++ * 
++ * Contributer has declined to give copyright information, and gives
++ * it freely to the world.
++ * 
++ * Contributor(s): 
++ */
++
++#include "mp4common.h"
++
++MP4PaspAtom::MP4PaspAtom() 
++      : MP4Atom("pasp") 
++{
++
++      AddProperty( /* 0 */
++        new MP4Integer32Property("hSpacing"));
++
++      AddProperty( /* 1 */
++        new MP4Integer32Property("vSpacing")); 
++
++}
++
++void MP4PaspAtom::Generate()
++{
++
++      MP4Atom::Generate();
++
++      ((MP4Integer32Property*)m_pProperties[0])->SetValue(1);
++      ((MP4Integer32Property*)m_pProperties[1])->SetValue(1);
++
++}
+diff -Naur mpeg4ip-patched/lib/mp4v2/Makefile.in mpeg4ip/lib/mp4v2/Makefile.in
+--- mpeg4ip-patched/lib/mp4v2/Makefile.in      2008-01-17 12:04:09.000000000 -0500
++++ mpeg4ip/lib/mp4v2/Makefile.in      2008-01-17 13:20:50.000000000 -0500
+@@ -58,7 +58,7 @@
+       atom_gmin.lo atom_text.lo \
+       atom_hdlr.lo atom_hinf.lo atom_hnti.lo atom_href.lo \
+       atom_mdat.lo atom_mdhd.lo atom_meta.lo atom_mp4a.lo \
+-      atom_mp4s.lo atom_mp4v.lo atom_mvhd.lo atom_root.lo \
++      atom_mp4s.lo atom_mp4v.lo atom_mvhd.lo atom_pasp.lo atom_root.lo \
+       atom_rtp.lo atom_s263.lo atom_sdp.lo atom_smi.lo atom_sound.lo \
+       atom_standard.lo atom_stbl.lo atom_stdp.lo atom_stsc.lo \
+       atom_stsd.lo atom_stsz.lo atom_tfhd.lo atom_tkhd.lo \
+@@ -96,6 +96,7 @@
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_mp4v.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_mvhd.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_root.Plo ./$(DEPDIR)/atom_rtp.Plo \
++@AMDEP_TRUE@  ./$(DEPDIR)/atom_pasp.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_s263.Plo ./$(DEPDIR)/atom_sdp.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_smi.Plo \
+ @AMDEP_TRUE@  ./$(DEPDIR)/atom_sound.Plo \
+@@ -364,6 +365,7 @@
+       atom_mp4s.cpp \
+       atom_mp4v.cpp \
+       atom_mvhd.cpp \
++      atom_pasp.cpp \
+       atom_root.cpp \
+       atom_rtp.cpp \
+       atom_s263.cpp \
+@@ -518,6 +520,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_mp4s.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_mp4v.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_mvhd.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_pasp.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_root.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_rtp.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atom_s263.Plo@am__quote@