Update to mkvtoolnix-8.1.0.

from brad (maintainer)
This commit is contained in:
ajacoutot 2015-07-02 08:30:24 +00:00
parent 7c34de513e
commit 09dac95883
5 changed files with 172 additions and 10 deletions

View File

@ -1,8 +1,8 @@
# $OpenBSD: Makefile,v 1.37 2015/06/20 20:30:08 ajacoutot Exp $
# $OpenBSD: Makefile,v 1.38 2015/07/02 08:30:24 ajacoutot Exp $
COMMENT= create, alter and inspect Matroska files
DISTNAME= mkvtoolnix-8.0.0
DISTNAME= mkvtoolnix-8.1.0
CATEGORIES= multimedia x11
MASTER_SITES= ${HOMEPAGE}/sources/
EXTRACT_SUFX= .tar.xz
@ -58,7 +58,7 @@ FLAVOR?=
CONFIGURE_ARGS+= --disable-gui
.else
MODULES+= x11/qt5
WANTLIB+= Qt5Core Qt5Gui Qt5Widgets
WANTLIB+= Qt5Core Qt5Gui Qt5Network Qt5Widgets
RUN_DEPENDS+= devel/desktop-file-utils \
misc/shared-mime-info \
x11/gtk+3,-guic

View File

@ -1,2 +1,2 @@
SHA256 (mkvtoolnix-8.0.0.tar.xz) = LriYSzFkY5lbvoP334DibVlNp+s1osKNg1Wb8ZQlNao=
SIZE (mkvtoolnix-8.0.0.tar.xz) = 5760776
SHA256 (mkvtoolnix-8.1.0.tar.xz) = cV2IQR4jhgwIVjnr3JFjtEmN9/MBaVg6mlcq3XK1cuU=
SIZE (mkvtoolnix-8.1.0.tar.xz) = 5784428

View File

@ -1,9 +1,9 @@
$OpenBSD: patch-ac_qt5_m4,v 1.1 2015/05/27 21:18:48 ajacoutot Exp $
$OpenBSD: patch-ac_qt5_m4,v 1.2 2015/07/02 08:30:25 ajacoutot Exp $
Workaround for OpenBSD's pkg-config.
--- ac/qt5.m4.orig Mon May 25 03:46:47 2015
+++ ac/qt5.m4 Mon May 25 03:48:53 2015
--- ac/qt5.m4.orig Sat Jun 27 02:44:45 2015
+++ ac/qt5.m4 Thu Jul 2 02:11:28 2015
@@ -124,13 +124,12 @@ if test x"$enable_qt" = "xyes" -a \
fi
@ -13,8 +13,8 @@ Workaround for OpenBSD's pkg-config.
- with_qt_pkg_config_modules="$with_qt_pkg_config_modules,"
+ with_qt_pkg_config_modules="$with_qt_pkg_config_modules"
fi
- with_qt_pkg_config_modules="$with_qt_pkg_config_modules,Qt5Core,Qt5Gui,Qt5Widgets"
+ with_qt_pkg_config_modules="$with_qt_pkg_config_modules Qt5Core Qt5Gui Qt5Widgets"
- with_qt_pkg_config_modules="$with_qt_pkg_config_modules,Qt5Core,Qt5Gui,Qt5Widgets,Qt5Network"
+ with_qt_pkg_config_modules="$with_qt_pkg_config_modules Qt5Core Qt5Gui Qt5Widgets Qt5Network"
PKG_CHECK_EXISTS([$with_qt_pkg_config_modules],,[ok=0])
- PKG_CHECK_EXISTS([Qt5PlatformSupport],[with_qt_pkg_config_modules="$with_qt_pkg_config_modules,Qt5PlatformSupport"])
+ PKG_CHECK_EXISTS([Qt5PlatformSupport],[with_qt_pkg_config_modules="$with_qt_pkg_config_modules Qt5PlatformSupport"])

View File

@ -0,0 +1,104 @@
$OpenBSD: patch-src_mpegparser_M2VParser_cpp,v 1.1 2015/07/02 08:30:25 ajacoutot Exp $
MPEG parser: don't use potentially dangling pointers for remembering timescodes
--- src/mpegparser/M2VParser.cpp.orig Thu Jul 2 03:44:51 2015
+++ src/mpegparser/M2VParser.cpp Thu Jul 2 03:56:35 2015
@@ -27,12 +27,6 @@
#define BUFF_SIZE 2*1024*1024
-void MPEGFrameRef::TryUpdate(){
- // if frame set, stamped and no timecode yet, derive it
- if (frame && frame->stamped && (timecode == -1))
- timecode = frame->timecode;
-}
-
MPEGFrame::MPEGFrame(binary *n_data, uint32_t n_size, bool n_bCopy):
size(n_size), bCopy(n_bCopy) {
@@ -111,7 +105,8 @@ void M2VParser::DumpQueues(){
}
M2VParser::M2VParser()
- : throwOnError{}
+ : frameCounter{}
+ , throwOnError{}
{
mpgBuf = new MPEGVideoBuffer(BUFF_SIZE);
@@ -231,20 +226,21 @@ void M2VParser::StampFrame(MPEGFrame* frame){
previousDuration = frame->duration;
frame->stamped = true;
+ frameTimecodes[frame->frameNumber] = frame->timecode;
// update affected ref timecodes
for (int i = 0; i < 2; i++)
- if (refs[i].frame == frame)
- refs[i].TryUpdate();
+ if (refs[i].frameNumber == frame->frameNumber)
+ TryUpdate(refs[i]);
}
void M2VParser::UpdateFrame(MPEGFrame* frame){
// derive ref timecodes
for (int i = 0; i < 2; i++) {
- if (!frame->tmpRefs[i].frame)
+ if (!frame->tmpRefs[i].HasFrameNumber())
continue;
- frame->tmpRefs[i].TryUpdate();
- assert(frame->tmpRefs[i].timecode != -1); // ensure the timecode indeed has been set (sometime before)
+ TryUpdate(frame->tmpRefs[i]);
+ assert(frame->tmpRefs[i].HasTimecode()); // ensure the timecode indeed has been set (sometime before)
frame->refs[i] = frame->tmpRefs[i].timecode;
}
}
@@ -324,6 +320,7 @@ int32_t M2VParser::PrepareFrame(MPEGChunk* chunk, Medi
}
outBuf = new MPEGFrame(pData, dataLen, bCopy);
+ outBuf->frameNumber = frameCounter++;
if (seqHdrChunk && !keepSeqHdrsInBitstream &&
(MPEG2_I_FRAME == picHdr.frameType)) {
@@ -368,7 +365,7 @@ void M2VParser::ShoveRef(MPEGFrame *ref){
if(ref->frameType == 'I' || ref->frameType == 'P'){
refs[0] = refs[1];
refs[1].Clear();
- refs[1].frame = ref;
+ refs[1].frameNumber = ref->frameNumber;
}
}
@@ -441,12 +438,12 @@ int32_t M2VParser::FillQueues(){
notReachedFirstGOP = false;
break;
case MPEG2_P_FRAME:
- if (!refs[1].frame)
+ if (!refs[1].HasFrameNumber())
break;
PrepareFrame(chunk, myTime, picHdr);
break;
default: //B-frames
- if (!refs[0].frame || !refs[1].frame) {
+ if (!refs[0].HasFrameNumber() || !refs[1].HasFrameNumber()) {
if (!m_gopHdr.closedGOP && !m_gopHdr.brokenLink && !probing && !b_frame_warning_printed) {
mxwarn(Y("Found at least one B frame without second reference in a non closed GOP.\n"));
b_frame_warning_printed = true;
@@ -488,4 +485,15 @@ M2VParser::AddTimecode(int64_t timecode) {
void
M2VParser::SetThrowOnError(bool doThrow) {
throwOnError = doThrow;
+}
+
+void
+M2VParser::TryUpdate(MPEGFrameRef &frame) {
+ // if frame set, stamped and no timecode yet, derive it
+ if (frame.HasTimecode() || !frame.HasFrameNumber())
+ return;
+
+ auto itr = frameTimecodes.find(frame.frameNumber);
+ if (itr != frameTimecodes.end())
+ frame.timecode = itr->second;
}

View File

@ -0,0 +1,58 @@
$OpenBSD: patch-src_mpegparser_M2VParser_h,v 1.1 2015/07/02 08:30:25 ajacoutot Exp $
MPEG parser: don't use potentially dangling pointers for remembering timescodes
--- src/mpegparser/M2VParser.h.orig Thu Jul 2 03:44:58 2015
+++ src/mpegparser/M2VParser.h Thu Jul 2 03:49:17 2015
@@ -39,17 +39,22 @@ enum MPEG2ParserState_e {
class MPEGFrame;
class MPEGFrameRef {
public:
- MPEGFrame *frame;
+ uint64_t frameNumber;
MediaTime timecode;
MPEGFrameRef() {
Clear();
}
void Clear() {
- frame = nullptr;
- timecode = -1;
+ frameNumber = std::numeric_limits<uint64_t>::max();
+ timecode = -1;
}
- void TryUpdate();
+ bool HasFrameNumber() const {
+ return std::numeric_limits<uint64_t>::max() != frameNumber;
+ }
+ bool HasTimecode() const {
+ return -1 != timecode;
+ }
};
class MPEGFrame {
@@ -71,6 +76,7 @@ class MPEGFrame { (public)
bool progressive;
uint8_t pictureStructure;
bool bCopy;
+ uint64_t frameNumber;
MPEGFrame(binary* data, uint32_t size, bool bCopy);
~MPEGFrame();
@@ -81,6 +87,8 @@ class M2VParser { (private)
std::vector<MPEGChunk*> chunks; //Hold the chunks until we can order them
std::vector<MPEGFrame*> waitQueue; //Holds unstamped buffers until we can stamp them.
std::queue<MPEGFrame*> buffers; //Holds stamped buffers until they are requested.
+ std::unordered_map<uint64_t, uint64_t> frameTimecodes;
+ uint64_t frameCounter;
MediaTime previousTimecode;
MediaTime previousDuration;
//Added to allow reading the header's raw data, contains first found seq hdr.
@@ -169,6 +177,7 @@ class M2VParser { (private)
void SetThrowOnError(bool doThrow);
void TimestampWaitingFrames();
+ void TryUpdate(MPEGFrameRef &frame);
};