mirror of https://github.com/FFmpeg/FFmpeg.git
This permits re-use with parsers for codecs which use similar start codes. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>pull/80/head
parent
eee813eec7
commit
db7f1c7c5a
11 changed files with 121 additions and 38 deletions
@ -0,0 +1,26 @@ |
||||
/*
|
||||
* This file is part of Libav. |
||||
* |
||||
* Libav is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* Libav is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with Libav; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_ARM_STARTCODE_H |
||||
#define AVCODEC_ARM_STARTCODE_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
int ff_startcode_find_candidate_armv6(const uint8_t *buf, int size); |
||||
|
||||
#endif /* AVCODEC_ARM_STARTCODE_H */ |
@ -0,0 +1,57 @@ |
||||
/*
|
||||
* Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at> |
||||
* |
||||
* This file is part of Libav. |
||||
* |
||||
* Libav is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* Libav is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with Libav; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* Accelerated start code search function for start codes common to |
||||
* MPEG-1/2/4 video, VC-1, H.264/5 |
||||
* @author Michael Niedermayer <michaelni@gmx.at> |
||||
*/ |
||||
|
||||
#include "startcode.h" |
||||
#include "config.h" |
||||
|
||||
int ff_startcode_find_candidate_c(const uint8_t *buf, int size) |
||||
{ |
||||
int i = 0; |
||||
#if HAVE_FAST_UNALIGNED |
||||
/* we check i < size instead of i + 3 / 7 because it is
|
||||
* simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE |
||||
* bytes at the end. |
||||
*/ |
||||
#if HAVE_FAST_64BIT |
||||
while (i < size && |
||||
!((~*(const uint64_t *)(buf + i) & |
||||
(*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & |
||||
0x8080808080808080ULL)) |
||||
i += 8; |
||||
#else |
||||
while (i < size && |
||||
!((~*(const uint32_t *)(buf + i) & |
||||
(*(const uint32_t *)(buf + i) - 0x01010101U)) & |
||||
0x80808080U)) |
||||
i += 4; |
||||
#endif |
||||
#endif |
||||
for (; i < size; i++) |
||||
if (!buf[i]) |
||||
break; |
||||
return i; |
||||
} |
@ -0,0 +1,26 @@ |
||||
/*
|
||||
* This file is part of Libav. |
||||
* |
||||
* Libav is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* Libav is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with Libav; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVCODEC_STARTCODE_H |
||||
#define AVCODEC_STARTCODE_H |
||||
|
||||
#include <stdint.h> |
||||
|
||||
int ff_startcode_find_candidate_c(const uint8_t *buf, int size); |
||||
|
||||
#endif /* AVCODEC_STARTCODE_H */ |
Loading…
Reference in new issue