summaryrefslogtreecommitdiff
path: root/src/vdefine.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vdefine.c')
-rw-r--r--src/vdefine.c360
1 files changed, 0 insertions, 360 deletions
diff --git a/src/vdefine.c b/src/vdefine.c
deleted file mode 100644
index 2472758..0000000
--- a/src/vdefine.c
+++ /dev/null
@@ -1,360 +0,0 @@
-
-#define AV_CONTAINER_MPEGTS 1
-#define AV_CONTAINER_FLV 2
-#define AV_CONTAINER_MP4 3
-#define UNKNOWN 4
-#define FIT_TIMES 1
-#define MAX_FLV_FRAME max_flv_frame;
-
-#include "vdefine.h"
-
-const char *mp4_box_type_all[] = { "ftyp", "pdin", "moov", "mvhd", "trak", "tkhd", "tref", "edts", "elst", "mdia", "mdhd",
- "hdlr", "minf", "vmhd", "smhd", "hmhd", "nmhd", "dinf", "dref", "stbl", "stsd", "stts", "ctts", "stsc", "stsz",
- "stz2", "stco", "co64", "stss", "stsh", "padb", "stdp", "sdtp", "sbgp", "sgpd", "subs", "mvex", "mehd", "trex",
- "ipmc", "moof", "mfhd", "traf", "tfhd", "trun", "sdtp", "sbgp", "subs", "mfra", "tfra", "mfro", "mdat", "free",
- "skip", "udta", "cprt", "meta", "hdlr", "dinf", "dref", "ipmc", "iloc", "ipro", "sinf", "frma", "imif", "schm",
- "schi", "iinf", "xml", "bxml", "pitm", "fiin", "paen", "fpar", "fecr", "segr", "gitn", "tsel", "meco", "mere" };
-int count_type = sizeof(mp4_box_type_all) / sizeof(char *);
-
-
-int is_mpeg_ts_each(const char *buff, size_t size)
-{
- int ret_ts_each = 0;
- const char *p = buff;
- int fit_times = 1;
- p += 188;
-
- size_t cont_cout_ori, cont_cout_end, cont_cout_pre, cont_cout_aft;
- cont_cout_ori = htonl(*(size_t *)buff) & 0x0000000f;
- cont_cout_pre = cont_cout_ori;
- while (p < (buff + size))
- {
- if (*p == 0x47)
- {
- if ((p + 3) < (buff + size))
- {
- cont_cout_aft = htonl(*(size_t *)p) & 0x0000000f;
- if (cont_cout_aft == (cont_cout_pre + 1) % 16)
- {
- fit_times++;
- }
- else
- {
- break;
- }
- }
- if (fit_times > FIT_TIMES)
- {
- size_t whole_pack_cout = size / 188;
- if (size % 188 == 0)
- {
- whole_pack_cout--;
- }
- size_t whole_pack_bites = whole_pack_cout * 188;
- const char *pack_tail = buff + whole_pack_bites;
- if (*pack_tail == 0x47 && *(pack_tail-188) == 0x47)
- {
- ret_ts_each = 1;
- break;
- }
- break;
- }
- }
- else
- {
- break;
- }
-
- cont_cout_pre = cont_cout_aft;
- p += 188;
- }
- return ret_ts_each;
-}
-
-int is_mpeg_ts(const char* buff, size_t size)
-{
- int ret_ts = 0;
- const char *p_each = buff;
- int ret_ts_each;
- while (p_each < buff + size)
- {
- p_each = memchr(p_each, 0x47, size - (p_each - buff));
- if (p_each == NULL)
- {
- break;
- }
- else if (p_each +3 >= buff + size)
- {
- break;
- }
- else
- {
- ret_ts_each = is_mpeg_ts_each(p_each, size - (p_each - buff));
- if (ret_ts_each == 1)
- {
- ret_ts = 1;
- break;
- }
- p_each++;
- }
- }
- return ret_ts;
-}
-
-
-void *memchr_flv(const char *buff, size_t size)
-{
- void *ret_memflv = NULL;
- const char *p = buff;
- while (p < buff + size)
- {
- if (*p == 0x08 || *p == 0x09 || *p == 0x12)
- {
- ret_memflv = (void *)p;
- break;
- }
- p++;
- }
- return ret_memflv;
-}
-
-int is_flv_each(const char* buff, size_t size)
-{
- int ret_flv_each = 0;
- const char *p = buff;
- int fit_times = 1;
- size_t left;
- size_t right = 11 + htonl(*(size_t *)p) & 0x00ffffff;
- p += (right + 4);
-
- while (p < (buff + size))
- {
- left = htonl(*(size_t *)(p - 4));
- if (right==left&&(*(p) == 0x08 || *(p) == 0x09 || *(p) == 0x12))
- {
- fit_times++;
- if (fit_times > FIT_TIMES)
- {
- ret_flv_each = 1;
- break;
- }
- }
- else
- {
- break;
- }
- if ((p + 3) >= (buff + size))
- {
- break;
- }
- right = 11 + htonl(*(size_t *)p) & 0x00ffffff;
- p += (right + 4);
- }
- return ret_flv_each;
-}
-
-int is_flv(const char* buff, size_t size)
-{
- int ret_flv = 0;
- int ret_flv_each;
- const char *p_each = buff;
-
- while (p_each < size + buff)
- {
- p_each = memchr_flv(p_each, size - (p_each - buff));
- if (p_each == NULL)
- {
- break;
- }
- else if (p_each + 3 >= buff + size)
- {
- break;
- }
- else
- {
- ret_flv_each = is_flv_each(p_each, size - (p_each - buff));
- if (ret_flv_each == 1)
- {
- ret_flv = 1;
- break;
- }
- p_each++;
- }
- }
- return ret_flv;
-}
-
-
-
-int is_mp4_part_boxtype(const char *buff)
-{
- int i;
- size_t size_type_h;
- for (i = 0; i < count_type; i++)
- {
- size_type_h = strlen(mp4_box_type_all[i]);
- if (memcmp(buff, mp4_box_type_all[i], size_type_h) == 0)
- return 1;
- }
- return 0;
-}
-
-int char_is_mp4(char c)
-{
- if (c >= 'a'&&c <= 'z' || c >= '0'&&c <= '9')
- {
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-int is_mp4_part_4char(const char *buff)
-{
- if (char_is_mp4(*buff) == 1 && char_is_mp4(*(buff + 1)) == 1 && char_is_mp4(*(buff + 2)) == 1 && char_is_mp4(*(buff + 3)) == 1)
- {
- return 1;
- }
- return 0;
-}
-
-void *memmem_mp4(const char *buff, size_t size)
-{
- void *ret_memmp4 = NULL;
- char s;
- const char *p = buff;
- while (p + 3 < buff + size)
- {
- if (is_mp4_part_4char(p) == 1)
- {
- ret_memmp4 = (void *)p;
- break;
- }
- p++;
- }
- return ret_memmp4;
-}
-
-int is_mp4_each(const char* buff, size_t size)
-{
- int ret_mp4_each = 0;
- int ret_mp4_part_4char;
- int sig_boxtype = 0;
- if (is_mp4_part_boxtype(buff) == 1)
- {
- sig_boxtype = 1;
- }
- const char *p = buff;
- int fit_times = 1;
-
- size_t size_h;
-
- p += 8;
- while (p + 4 < (buff + size))
- {
- ret_mp4_part_4char = is_mp4_part_4char(p);
- if (ret_mp4_part_4char == 1)
- {
- fit_times++;
- if (is_mp4_part_boxtype(p) == 1)
- {
- sig_boxtype++;
- }
- if (fit_times > FIT_TIMES&&sig_boxtype >= 1)
- {
- ret_mp4_each = 1;
- break;
- }
- if (fit_times > FIT_TIMES+1)
- {
- break;
- }
- }
-
- else
- {
- p -= 8;
- size_h = htonl(*(size_t *)(p - 4));
- p += size_h;
- if (p + 4 < buff + size)
- {
- ret_mp4_part_4char = is_mp4_part_4char(p);
- if (ret_mp4_part_4char == 1)
- {
- fit_times++;
- if (is_mp4_part_boxtype(p) == 1)
- {
- sig_boxtype++;
- }
- if (fit_times > FIT_TIMES&&sig_boxtype >= 1)
- {
- ret_mp4_each = 1;
- break;
- }
- if (fit_times > FIT_TIMES + 1)
- {
- break;
- }
- }
- else
- {
- break;
- }
- }
- }
- p += 8;
- }
- return ret_mp4_each;
-}
-
-int is_mp4(const char* buff, size_t size)
-{
- int ret_mp4 = 0;
- int ret_mp4_each;
- const char *p_each = buff;
-
- while (p_each < buff + size)
- {
- p_each = (const char *)memmem_mp4(p_each, size - (p_each - buff));
- if (p_each == NULL)
- {
- break;
- }
- else if (p_each + 12 >= buff + size || p_each - 4 < buff)
- {
- break;
- }
- else
- {
- ret_mp4_each = is_mp4_each(p_each, size - (p_each - buff));
- if (ret_mp4_each == 1)
- {
- ret_mp4 = 1;
- break;
- }
- p_each++;
- }
- }
- return ret_mp4;
-}
-
-int AV_container_identify(const char* buff, size_t size)
-{
- if (1 == is_mpeg_ts(buff, size))
- {
- return AV_CONTAINER_MPEGTS;
- }
- if (1 == is_flv(buff, size))
- {
- return AV_CONTAINER_FLV;
- }
- if (1 == is_mp4(buff, size))
- {
- return AV_CONTAINER_MP4;
- }
- return UNKNOWN;
-}
-
-