diff options
Diffstat (limited to 'src/vdefine.c')
| -rw-r--r-- | src/vdefine.c | 360 |
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; -} - - |
