aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-11-08 21:43:27 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-11-08 22:33:52 +0100
commita26e83da6c96d21b18668f0a00e6627172f43722 (patch)
tree0c6392e3639f4c0a335318ecde48253cfd7cb04c
parent6b4f58d448f4c4a077184e5f957f40083ab3c57f (diff)
downloadffmpeg-a26e83da6c96d21b18668f0a00e6627172f43722.tar.gz
avformat/mxfdec: optimize probing
about 71 times faster Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/mxfdec.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index d0cbeead96..3ecde3dfa8 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -47,6 +47,7 @@
#include "libavutil/avassert.h"
#include "libavutil/mathematics.h"
#include "libavcodec/bytestream.h"
+#include "libavutil/intreadwrite.h"
#include "libavutil/timecode.h"
#include "avformat.h"
#include "internal.h"
@@ -2456,10 +2457,19 @@ static int mxf_probe(AVProbeData *p) {
/* Must skip Run-In Sequence and search for MXF header partition pack key SMPTE 377M 5.5 */
end -= sizeof(mxf_header_partition_pack_key);
- for (; bufp < end; bufp++) {
- if (IS_KLV_KEY(bufp, mxf_header_partition_pack_key))
- return AVPROBE_SCORE_MAX;
+
+ for (; bufp < end;) {
+ if (!((bufp[13] - 1) & 0xF2)){
+ if (AV_RN32(bufp ) == AV_RN32(mxf_header_partition_pack_key ) &&
+ AV_RN32(bufp+ 4) == AV_RN32(mxf_header_partition_pack_key+ 4) &&
+ AV_RN32(bufp+ 8) == AV_RN32(mxf_header_partition_pack_key+ 8) &&
+ AV_RN16(bufp+12) == AV_RN16(mxf_header_partition_pack_key+12))
+ return AVPROBE_SCORE_MAX;
+ bufp ++;
+ } else
+ bufp += 10;
}
+
return 0;
}