summaryrefslogtreecommitdiff
path: root/libavcodec/h264.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-03-21 15:38:31 +0100
committerAnton Khirnov <anton@khirnov.net>2016-04-24 10:06:23 +0200
commit8d0cc8ca97678f4ca87948ebabcbaab5a4f4c1f6 (patch)
tree0a3ba3db5a734025e0b718b4457be3ee10d4ae07 /libavcodec/h264.c
parentf3ed484953b81856e40239d2410058a96188b2be (diff)
h264_parser: switch to h2645_parse for NAL unescaping
Remove now unused ff_h264_decode_nal().
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r--libavcodec/h264.c106
1 files changed, 0 insertions, 106 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index acda35b94f..da7f88f66c 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -116,112 +116,6 @@ void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl,
}
}
-const uint8_t *ff_h264_decode_nal(H264Context *h, H264SliceContext *sl,
- const uint8_t *src,
- int *dst_length, int *consumed, int length)
-{
- int i, si, di;
- uint8_t *dst;
-
- // src[0]&0x80; // forbidden bit
- h->nal_ref_idc = src[0] >> 5;
- h->nal_unit_type = src[0] & 0x1F;
-
- src++;
- length--;
-
-#define STARTCODE_TEST \
- if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \
- if (src[i + 2] != 3) { \
- /* startcode, so we must be past the end */ \
- length = i; \
- } \
- break; \
- }
-
-#if HAVE_FAST_UNALIGNED
-#define FIND_FIRST_ZERO \
- if (i > 0 && !src[i]) \
- i--; \
- while (src[i]) \
- i++
-
-#if HAVE_FAST_64BIT
- for (i = 0; i + 1 < length; i += 9) {
- if (!((~AV_RN64A(src + i) &
- (AV_RN64A(src + i) - 0x0100010001000101ULL)) &
- 0x8000800080008080ULL))
- continue;
- FIND_FIRST_ZERO;
- STARTCODE_TEST;
- i -= 7;
- }
-#else
- for (i = 0; i + 1 < length; i += 5) {
- if (!((~AV_RN32A(src + i) &
- (AV_RN32A(src + i) - 0x01000101U)) &
- 0x80008080U))
- continue;
- FIND_FIRST_ZERO;
- STARTCODE_TEST;
- i -= 3;
- }
-#endif
-#else
- for (i = 0; i + 1 < length; i += 2) {
- if (src[i])
- continue;
- if (i > 0 && src[i - 1] == 0)
- i--;
- STARTCODE_TEST;
- }
-#endif
-
- if (i >= length - 1) { // no escaped 0
- *dst_length = length;
- *consumed = length + 1; // +1 for the header
- return src;
- }
-
- av_fast_malloc(&sl->rbsp_buffer, &sl->rbsp_buffer_size,
- length + AV_INPUT_BUFFER_PADDING_SIZE);
- dst = sl->rbsp_buffer;
-
- if (!dst)
- return NULL;
-
- memcpy(dst, src, i);
- si = di = i;
- while (si + 2 < length) {
- // remove escapes (very rare 1:2^22)
- if (src[si + 2] > 3) {
- dst[di++] = src[si++];
- dst[di++] = src[si++];
- } else if (src[si] == 0 && src[si + 1] == 0) {
- if (src[si + 2] == 3) { // escape
- dst[di++] = 0;
- dst[di++] = 0;
- si += 3;
- continue;
- } else // next start code
- goto nsc;
- }
-
- dst[di++] = src[si++];
- }
- while (si < length)
- dst[di++] = src[si++];
-
-nsc:
- memset(dst + di, 0, AV_INPUT_BUFFER_PADDING_SIZE);
-
- *dst_length = di;
- *consumed = si + 1; // +1 for the header
- /* FIXME store exact number of bits in the getbitcontext
- * (it is needed for decoding) */
- return dst;
-}
-
void ff_h264_free_tables(H264Context *h)
{
int i;