summaryrefslogtreecommitdiffstats
path: root/libmpdemux/mpeg_hdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux/mpeg_hdr.c')
-rw-r--r--libmpdemux/mpeg_hdr.c70
1 files changed, 34 insertions, 36 deletions
diff --git a/libmpdemux/mpeg_hdr.c b/libmpdemux/mpeg_hdr.c
index 4fb1dc22b0..b42f7e86c2 100644
--- a/libmpdemux/mpeg_hdr.c
+++ b/libmpdemux/mpeg_hdr.c
@@ -373,7 +373,40 @@ static int h264_parse_vui(mp_mpeg_header_t * picture, unsigned char * buf, unsig
return n;
}
-static int mp_unescape03(unsigned char *buf, int len);
+static int mp_unescape03(unsigned char *buf, int len)
+{
+ unsigned char *dest;
+ int i, j, skip;
+
+ dest = malloc(len);
+ if(! dest)
+ return 0;
+
+ j = i = skip = 0;
+ while(i <= len-3)
+ {
+ if(buf[i] == 0 && buf[i+1] == 0 && buf[i+2] == 3)
+ {
+ dest[j] = dest[j+1] = 0;
+ j += 2;
+ i += 3;
+ skip++;
+ }
+ else
+ {
+ dest[j] = buf[i];
+ j++;
+ i++;
+ }
+ }
+ dest[j] = buf[len-2];
+ dest[j+1] = buf[len-1];
+ len -= skip;
+ memcpy(buf, dest, len);
+ free(dest);
+
+ return len;
+}
int h264_parse_sps(mp_mpeg_header_t * picture, unsigned char * buf, int len)
{
@@ -438,41 +471,6 @@ int h264_parse_sps(mp_mpeg_header_t * picture, unsigned char * buf, int len)
return n;
}
-static int mp_unescape03(unsigned char *buf, int len)
-{
- unsigned char *dest;
- int i, j, skip;
-
- dest = malloc(len);
- if(! dest)
- return 0;
-
- j = i = skip = 0;
- while(i <= len-3)
- {
- if(buf[i] == 0 && buf[i+1] == 0 && buf[i+2] == 3)
- {
- dest[j] = dest[j+1] = 0;
- j += 2;
- i += 3;
- skip++;
- }
- else
- {
- dest[j] = buf[i];
- j++;
- i++;
- }
- }
- dest[j] = buf[len-2];
- dest[j+1] = buf[len-1];
- len -= skip;
- memcpy(buf, dest, len);
- free(dest);
-
- return len;
-}
-
int mp_vc1_decode_sequence_header(mp_mpeg_header_t * picture, unsigned char * buf, int len)
{
int n, x;