nixpkgs/pkgs/development/libraries/mp4v2/A00-nero-vobsub.patch
Wout Mertens d1ebc1a2b3 mp4v2: Add patches from Handbrake project
mp4v2 seems abandoned upstream.

Patches:
- A00: Add API call for subpicture subtitles
- A01: Fix divide by zero
- A02: Give a meaningfull error when hitting 4GB limit
- P00: Fix compilation with mingw32
2014-05-04 01:56:48 +02:00

142 lines
5.7 KiB
Diff

diff -Naur mp4v2-trunk-r355/include/mp4v2/general.h mp4v2-trunk-r355/include/mp4v2/general.h
--- mp4v2-trunk-r355/include/mp4v2/general.h 2009-05-23 06:09:58.000000000 -0700
+++ mp4v2-trunk-r355/include/mp4v2/general.h 2010-05-23 14:22:21.949288657 -0700
@@ -75,6 +75,7 @@
#define MP4_CNTL_TRACK_TYPE "cntl" /**< Constant: control track. */
#define MP4_TEXT_TRACK_TYPE "text" /**< Constant: text track. */
#define MP4_SUBTITLE_TRACK_TYPE "sbtl" /**< Constant: subtitle track. */
+#define MP4_SUBPIC_TRACK_TYPE "subp" /**< Constant: subtitle track. */
/*
* This second set of track types should be created
* via MP4AddSystemsTrack(type)
diff -Naur mp4v2-trunk-r355/include/mp4v2/track.h mp4v2-trunk-r355/include/mp4v2/track.h
--- mp4v2-trunk-r355/include/mp4v2/track.h 2009-05-23 06:21:49.000000000 -0700
+++ mp4v2-trunk-r355/include/mp4v2/track.h 2010-05-23 15:43:47.249286008 -0700
@@ -310,6 +310,13 @@
uint16_t height );
MP4V2_EXPORT
+MP4TrackId MP4AddSubpicTrack(
+ MP4FileHandle hFile,
+ uint32_t timescale,
+ uint16_t width,
+ uint16_t height );
+
+MP4V2_EXPORT
MP4TrackId MP4AddPixelAspectRatio(
MP4FileHandle hFile,
MP4TrackId refTrackId,
diff -Naur mp4v2-trunk-r355/src/descriptors.h mp4v2-trunk-r355/src/descriptors.h
--- mp4v2-trunk-r355/src/descriptors.h 2009-05-20 19:52:32.000000000 -0700
+++ mp4v2-trunk-r355/src/descriptors.h 2010-05-23 16:29:34.800935677 -0700
@@ -119,6 +119,7 @@
// ES objectTypeId
const uint8_t MP4SystemsV1ObjectType = 0x01;
const uint8_t MP4SystemsV2ObjectType = 0x02;
+const uint8_t MP4SubpicObjectType = 0xe0;
// ES streamType
const uint8_t MP4ObjectDescriptionStreamType = 0x01;
@@ -131,6 +132,7 @@
const uint8_t MP4OCIStreamType = 0x08;
const uint8_t MP4MPEGJStreamType = 0x09;
const uint8_t MP4UserPrivateStreamType = 0x20;
+const uint8_t MP4NeroSubpicStreamType = 0x38;
///////////////////////////////////////////////////////////////////////////////
diff -Naur mp4v2-trunk-r355/src/mp4.cpp mp4v2-trunk-r355/src/mp4.cpp
--- mp4v2-trunk-r355/src/mp4.cpp 2009-05-23 06:29:37.000000000 -0700
+++ mp4v2-trunk-r355/src/mp4.cpp 2010-05-23 15:45:28.852222074 -0700
@@ -1174,6 +1174,23 @@
return MP4_INVALID_TRACK_ID;
}
+ MP4TrackId MP4AddSubpicTrack(MP4FileHandle hFile,
+ uint32_t timescale,
+ uint16_t width,
+ uint16_t height)
+ {
+ if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
+ try {
+ return ((MP4File*)hFile)->AddSubpicTrack(timescale, width, height);
+ }
+ catch (MP4Error* e) {
+ PRINT_ERROR(e);
+ delete e;
+ }
+ }
+ return MP4_INVALID_TRACK_ID;
+ }
+
MP4TrackId MP4AddChapterTextTrack(
MP4FileHandle hFile, MP4TrackId refTrackId, uint32_t timescale)
{
diff -Naur mp4v2-trunk-r355/src/mp4file.cpp mp4v2-trunk-r355/src/mp4file.cpp
--- mp4v2-trunk-r355/src/mp4file.cpp 2009-05-26 19:34:56.000000000 -0700
+++ mp4v2-trunk-r355/src/mp4file.cpp 2010-05-23 16:32:52.654220633 -0700
@@ -2095,6 +2095,50 @@
return trackId;
}
+MP4TrackId MP4File::AddSubpicTrack(uint32_t timescale,
+ uint16_t width,
+ uint16_t height)
+{
+ MP4TrackId trackId =
+ AddTrack(MP4_SUBPIC_TRACK_TYPE, timescale);
+
+ InsertChildAtom(MakeTrackName(trackId, "mdia.minf"), "nmhd", 0);
+
+ (void)AddChildAtom(MakeTrackName(trackId, "mdia.minf.stbl.stsd"), "mp4s");
+
+ SetTrackFloatProperty(trackId, "tkhd.width", width);
+ SetTrackFloatProperty(trackId, "tkhd.height", height);
+ SetTrackIntegerProperty(trackId, "tkhd.layer", 0);
+
+ // 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 mp4s atom
+ MP4Integer32Property* pStsdCountProperty;
+ FindIntegerProperty(
+ MakeTrackName(trackId, "mdia.minf.stbl.stsd.entryCount"),
+ (MP4Property**)&pStsdCountProperty);
+ pStsdCountProperty->IncrementValue();
+
+ SetTrackIntegerProperty(trackId,
+ "mdia.minf.stbl.stsd.mp4s.esds.ESID",
+#if 0
+ // note - for a file, these values need to
+ // be 0 - wmay - 04/16/2003
+ trackId
+#else
+ 0
+#endif
+ );
+
+ SetTrackIntegerProperty(trackId,
+ "mdia.minf.stbl.stsd.mp4s.esds.decConfigDescr.objectTypeId",
+ MP4SubpicObjectType);
+
+ SetTrackIntegerProperty(trackId,
+ "mdia.minf.stbl.stsd.mp4s.esds.decConfigDescr.streamType",
+ MP4NeroSubpicStreamType);
+ return trackId;
+}
+
MP4TrackId MP4File::AddChapterTextTrack(MP4TrackId refTrackId, uint32_t timescale)
{
// validate reference track id
diff -Naur mp4v2-trunk-r355/src/mp4file.h mp4v2-trunk-r355/src/mp4file.h
--- mp4v2-trunk-r355/src/mp4file.h 2009-05-23 06:29:37.000000000 -0700
+++ mp4v2-trunk-r355/src/mp4file.h 2010-05-23 15:44:57.568026299 -0700
@@ -388,6 +388,10 @@
uint16_t width,
uint16_t height);
+ MP4TrackId AddSubpicTrack(uint32_t timescale,
+ uint16_t width,
+ uint16_t height);
+
MP4TrackId AddPixelAspectRatio(MP4TrackId trackId, uint32_t hSpacing, uint32_t vSpacing);
MP4TrackId AddColr(MP4TrackId trackId, uint16_t pri, uint16_t tran, uint16_t mat);