[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-commits
Subject:    [haiku-commits] haiku: hrev52692 - headers/os/codec src/kits/codec src/add-ons/media/plugins/ffmpeg
From:       Barrett17 <b.vitruvio () gmail ! com>
Date:       2018-12-27 11:28:13
Message-ID: 20181227112813.009B220CBD () turing ! freelists ! org
[Download RAW message or body]

hrev52692 adds 3 changesets to branch 'master'
old head: 13beda00d3b2f67f45d9427396b9785145d07fb6
new head: e0a0f13051d0026e350e31ad29a6a9ba08437bf1
overview: https://git.haiku-os.org/haiku/log/?qt=range&q=e0a0f13051d0+%5E13beda00d3b2

----------------------------------------------------------------------------

ec75b9fc8e54: MetaData: Add missing keys

e98351d3bcd3: MetaData: Revert types to uint32 and define framerate as float
  
  * Adds some missing methods signatures.
  * integer vs float framerate is a longstanging debate. In theory,
  in digital a/v there should not be need for floating point framerates.
  This is because unless the software is run on exoteric hardware, there
  is not need for it. Unfortunately, some legacy from the past like the
  29.7 hz debate (NTSC) still may need to work under floating point framerates.
  Even if in pratice it'd be run at 30 hz anyway.
  * In theory, to handle all those correctly we should use a rational framerate,
  however most code should be rewritten to support that correctly, and
  it'd add some excessive complexities.
  * All integer types are reverted back to unsigned ones. There's really
  no reason to use signed integers there, and more importantly the danger
  for integer underflows and the attached security concerns is very big.

e0a0f13051d0: ffmpeg: Use unsigned integers for chapter data

                                        [ Barrett17 <b.vitruvio@gmail.com> ]

----------------------------------------------------------------------------

3 files changed, 68 insertions(+), 29 deletions(-)
headers/os/codec/MetaData.h                      | 60 ++++++++++++--------
.../media/plugins/ffmpeg/AVFormatReader.cpp      |  4 +-
src/kits/codec/MetaData.cpp                      | 33 ++++++++++-

############################################################################

Commit:      ec75b9fc8e542d86b10385fcd966b3c69c013593
URL:         https://git.haiku-os.org/haiku/commit/?id=ec75b9fc8e54
Author:      Barrett17 <b.vitruvio@gmail.com>
Date:        Wed Dec 26 17:04:23 2018 UTC

MetaData: Add missing keys

----------------------------------------------------------------------------

diff --git a/src/kits/codec/MetaData.cpp b/src/kits/codec/MetaData.cpp
index 409b9959f2..e338ce12d0 100644
--- a/src/kits/codec/MetaData.cpp
+++ b/src/kits/codec/MetaData.cpp
@@ -32,6 +32,21 @@ const char* kVideoWidth			= "videowidth";
 const char* kNumTracks			= "numtracks";
 const char* kDrmCrippled		= "drmcrippled";
 
+const char* kMediaType			= "mediatype";
+
+const char* kChannelCount		= "channelcount";
+const char* kAudioFormat		= "audioformat";
+const char* kByteOrder			= "byteorder";
+const char* kBufferSize			= "buffersize";
+
+const char* kLineWidth			= "linewidth";
+const char* kLineCount			= "linecount";
+const char* kBytesPerRow		= "bytesperrow";
+const char* kPixelOffset		= "pixeloffset";
+const char* kLineOffset			= "lineoffset";
+const char* kColorSpace			= "colorspace";
+const char* kOrientation		= "orientation";
+
 const char* kTitle				= "title";
 const char* kComment			= "comment";
 const char* kCopyright			= "copyright";

############################################################################

Commit:      e98351d3bcd306a70346d3511f971db8888fb9a5
URL:         https://git.haiku-os.org/haiku/commit/?id=e98351d3bcd3
Author:      Barrett17 <b.vitruvio@gmail.com>
Date:        Thu Dec 27 11:16:11 2018 UTC

MetaData: Revert types to uint32 and define framerate as float

* Adds some missing methods signatures.
* integer vs float framerate is a longstanging debate. In theory,
in digital a/v there should not be need for floating point framerates.
This is because unless the software is run on exoteric hardware, there
is not need for it. Unfortunately, some legacy from the past like the
29.7 hz debate (NTSC) still may need to work under floating point framerates.
Even if in pratice it'd be run at 30 hz anyway.
* In theory, to handle all those correctly we should use a rational framerate,
however most code should be rewritten to support that correctly, and
it'd add some excessive complexities.
* All integer types are reverted back to unsigned ones. There's really
no reason to use signed integers there, and more importantly the danger
for integer underflows and the attached security concerns is very big.

----------------------------------------------------------------------------

diff --git a/headers/os/codec/MetaData.h b/headers/os/codec/MetaData.h
index 6afa0b263d..6d2753e18f 100644
--- a/headers/os/codec/MetaData.h
+++ b/headers/os/codec/MetaData.h
@@ -19,36 +19,36 @@ extern const char* kCanSeekForward;		// bool
 extern const char* kCanSeek;			// bool
 
 // Bitrates
-extern const char* kAudioBitRate;		// int32 (bps)
-extern const char* kVideoBitRate;		// int32 (bps)
-extern const char* kAudioSampleRate;	// int32 (hz)
-extern const char* kVideoFrameRate;		// int32 (hz)
+extern const char* kAudioBitRate;		// uint32 (bps)
+extern const char* kVideoBitRate;		// uint32 (bps)
+extern const char* kAudioSampleRate;	// float (hz)
+extern const char* kVideoFrameRate;		// float (hz)
 
 // RFC2046 and RFC4281
 extern const char* kMimeType;			// BString
 extern const char* kAudioCodec;			// BString
 extern const char* kVideoCodec;			// BString
-extern const char* kVideoHeight;		// int32
-extern const char* kVideoWidth;			// int32
-extern const char* kNumTracks;			// int32
+extern const char* kVideoHeight;		// uint32
+extern const char* kVideoWidth;			// uint32
+extern const char* kNumTracks;			// uint32
 extern const char* kDrmCrippled;		// bool
 
 // Stuff needed to fully describe the BMediaFormat
 extern const char* kMediaType;			// media_type
 // Audio stuff
-extern const char* kChannelCount;		// int32
-extern const char* kAudioFormat;		// int32
-extern const char* kByteOrder;			// int32
+extern const char* kChannelCount;		// uint32
+extern const char* kAudioFormat;		// uint32
+extern const char* kByteOrder;			// uint32
 extern const char* kBufferSize;			// size_t
 // This is also BMediaFormat stuff, but mostly video
 // NOTE: video width/height are defined as per RFC mentioned above
-extern const char* kLineWidth;			// int32
-extern const char* kLineCount;			// int32
-extern const char* kBytesPerRow;		// int32
-extern const char* kPixelOffset;		// int32
-extern const char* kLineOffset;			// int32
+extern const char* kLineWidth;			// uint32
+extern const char* kLineCount;			// uint32
+extern const char* kBytesPerRow;		// uint32
+extern const char* kPixelOffset;		// uint32
+extern const char* kLineOffset;			// uint32
 extern const char* kColorSpace;			// color_space
-extern const char* kOrientation;		// int32
+extern const char* kOrientation;		// uint32
 
 // General use attributes
 extern const char* kTitle;				// BString
@@ -69,16 +69,16 @@ extern const char* kPublisher;			// BString
 extern const char* kEncoder;			// BString
 extern const char* kTrack;
 extern const char* kDate;				// BString
-extern const char* kDuration;			// int32 (ms)
+extern const char* kDuration;			// uint32 (ms)
 extern const char* kRating;				// BString
 // TODO: BBitmap? uint8 array? url?
 //extern const char* kAlbumArt
-extern const char* kCDTrackNum;			// int32
-extern const char* kCDTrackMax;			// int32
+extern const char* kCDTrackNum;			// uint32
+extern const char* kCDTrackMax;			// uint32
 
 extern const char* kChapter;			// BMetaData
-extern const char* kChapterStart;		// int64
-extern const char* kChapterEnd;			// int64
+extern const char* kChapterStart;		// uint64
+extern const char* kChapterEnd;			// uint64
 
 // Others
 extern const char* kProgramData;		// BMetaData
@@ -96,13 +96,21 @@ public:
 	// Woah. It seems we need BValue there.
 	bool				SetString(const char* key, const BString& value);
 	bool				SetBool(const char* key, bool value);
-	bool				SetInt32(const char* key, int32 value);
-	bool				SetInt64(const char* key, int64 value);
+	bool				SetUInt32(const char* key, uint32 value);
+	bool				SetUInt64(const char* key, uint64 value);
+	bool				SetFloat(const char* key, float value);
 
 	bool				GetString(const char* key, BString* value) const;
 	bool				GetBool(const char* key, bool* value) const;
-	bool				GetInt32(const char* key, int32* value) const;
-	bool				GetInt64(const char* key, int64* value) const;
+	bool				GetUInt32(const char* key, uint32* value) const;
+	bool				GetUInt64(const char* key, uint64* value) const;
+	bool				GetFloat(const char* key, float* value);
+
+	bool				HasString(const char* key) const;
+	bool				HasBool(const char* key) const;
+	bool				HasUInt32(const char* key) const;
+	bool				HasUInt64(const char* key) const;
+	bool				HasFloat(const char* key) const;
 
 	// We allow embedding BMetaData into BMetaData. The BMetaData field
 	// is the only one allowed to have more occurrences for a single key
@@ -110,6 +118,8 @@ public:
 	bool				AddMetaData(const char* key, BMetaData* data);
 	bool				GetMetaData(const char* key, BMetaData* data,
 							uint32 index = 0);
+	bool				HasMetaData(const char* key, uint32 index = 0);
+	bool				RemoveMetaData(const char* key, uint32 index = 0);
 
 	bool				RemoveValue(const char* key);
 
diff --git a/src/kits/codec/MetaData.cpp b/src/kits/codec/MetaData.cpp
index e338ce12d0..69e7c54084 100644
--- a/src/kits/codec/MetaData.cpp
+++ b/src/kits/codec/MetaData.cpp
@@ -114,9 +114,23 @@ BMetaData::SetBool(const char* key, bool value)
 
 
 bool
-BMetaData::SetInt64(const char* key, int64 value)
+BMetaData::SetUInt32(const char* key, uint32 value)
 {
-	return fMessage->SetInt64(key, value) == B_OK ? true : false;
+	return fMessage->SetUInt32(key, value) == B_OK ? true : false;
+}
+
+
+bool
+BMetaData::SetUInt64(const char* key, uint64 value)
+{
+	return fMessage->SetUInt64(key, value) == B_OK ? true : false;
+}
+
+
+bool
+BMetaData::SetFloat(const char* key, float value)
+{
+	return fMessage->SetFloat(key, value) == B_OK ? true : false;
 }
 
 

############################################################################

Revision:    hrev52692
Commit:      e0a0f13051d0026e350e31ad29a6a9ba08437bf1
URL:         https://git.haiku-os.org/haiku/commit/?id=e0a0f13051d0
Author:      Barrett17 <b.vitruvio@gmail.com>
Date:        Thu Dec 27 11:23:08 2018 UTC

ffmpeg: Use unsigned integers for chapter data

----------------------------------------------------------------------------

diff --git a/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp \
b/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp index 3c8e57371a..7b3f2c037a \
                100644
--- a/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp
+++ b/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp
@@ -1577,10 +1577,10 @@ AVFormatReader::GetMetaData(BMetaData* data)
 	for (unsigned i = 0; i < context->nb_chapters; i++) {
 		AVChapter* chapter = context->chapters[i];
 		BMetaData chapterData;
-		chapterData.SetInt64(kChapterStart, bigtime_t(1000000.0
+		chapterData.SetUInt64(kChapterStart, bigtime_t(1000000.0
 			* chapter->start * chapter->time_base.num
 			/ chapter->time_base.den + 0.5));
-		chapterData.SetInt64(kChapterEnd, bigtime_t(1000000.0
+		chapterData.SetUInt64(kChapterEnd, bigtime_t(1000000.0
 			* chapter->end * chapter->time_base.num
 			/ chapter->time_base.den + 0.5));
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic