?? detect_file_type.c
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#define ALLOW_OS_CODE 1#include "rmdef/rmdef.h"#include "rmcore/include/rmcore.h"#include "rmlibcw/include/rmlibcw.h"#include "rmdetector3api/include/rmdetector3api.h"#define DETECTION_THRESHOLD 512 // in KBstatic RMuint32 g_nestingLevel = 0;static RMuint32 g_currentRootStreamID = 0;static RMuint8 *print_type(enum RMdetector3_streamType type){ switch (type) { case RMdetector3_streamType_UNKNOWN: return (RMuint8 *)"unknown"; case RMdetector3_streamType_ELEMENTARY_AUDIO: return (RMuint8 *)"elementary_audio"; case RMdetector3_streamType_ELEMENTARY_VIDEO: return (RMuint8 *)"elementary_video"; case RMdetector3_streamType_SYSTEM: return (RMuint8 *)"system"; // pictures case RMdetector3_streamType_BMP: return (RMuint8 *)"bmp"; case RMdetector3_streamType_JPEG: return (RMuint8 *)"jpeg"; case RMdetector3_streamType_TIFF: return (RMuint8 *)"tiff"; case RMdetector3_streamType_PNG: return (RMuint8 *)"png"; case RMdetector3_streamType_GIF: return (RMuint8 *)"gif"; // elementary audio case RMdetector3_streamType_AUDIO_AC3: return (RMuint8 *)"audio_ac3"; case RMdetector3_streamType_AUDIO_ADIF: return (RMuint8 *)"audio_adif"; case RMdetector3_streamType_AUDIO_ADTS: return (RMuint8 *)"audio_adts"; case RMdetector3_streamType_AUDIO_DTS: return (RMuint8 *)"audio_dts"; case RMdetector3_streamType_AUDIO_DVD: return (RMuint8 *)"audio_dvd"; case RMdetector3_streamType_AUDIO_MPEG1: return (RMuint8 *)"audio_mpeg1"; case RMdetector3_streamType_AUDIO_MPEG1_LAYER3: return (RMuint8 *)"audio_mpeg1_layer3"; case RMdetector3_streamType_AUDIO_MPEG2: return (RMuint8 *)"audio_mpeg2"; case RMdetector3_streamType_AUDIO_MPEG2_LAYER1: return (RMuint8 *)"audio_mpeg2_layer1"; case RMdetector3_streamType_AUDIO_MPEG2_LAYER2: return (RMuint8 *)"audio_mpeg2_layer2"; case RMdetector3_streamType_AUDIO_MPEG2_LAYER3: return (RMuint8 *)"audio_mpeg2_layer3"; case RMdetector3_streamType_AUDIO_PCM: return (RMuint8 *)"audio_pcm"; case RMdetector3_streamType_AUDIO_REVERSE_PCM: return (RMuint8 *)"audio_reverse_pcm"; case RMdetector3_streamType_AUDIO_WMA: return (RMuint8 *)"audio_wma"; case RMdetector3_streamType_AUDIO_WMAPRO: return (RMuint8 *)"audio_wmapro"; case RMdetector3_streamType_AUDIO_WMATS: return (RMuint8 *)"audio_wmats"; case RMdetector3_streamType_AUDIO_LATM: return (RMuint8 *)"audio_wmats"; // elementary video case RMdetector3_streamType_VIDEO_DIVX3: return (RMuint8 *)"video_divx3"; case RMdetector3_streamType_VIDEO_DIVX4: return (RMuint8 *)"video_divx4"; case RMdetector3_streamType_VIDEO_H263: return (RMuint8 *)"video_h263"; case RMdetector3_streamType_VIDEO_H264: return (RMuint8 *)"video_h264"; case RMdetector3_streamType_VIDEO_MJPEG: return (RMuint8 *)"video_mjpeg"; case RMdetector3_streamType_VIDEO_MPEG12: return (RMuint8 *)"video_mpeg2"; case RMdetector3_streamType_VIDEO_MPEG4: return (RMuint8 *)"video_mpeg4"; case RMdetector3_streamType_VIDEO_VC1: return (RMuint8 *)"video_vc1"; case RMdetector3_streamType_VIDEO_WMV: return (RMuint8 *)"video_wmv"; case RMdetector3_streamType_VIDEO_XVID: return (RMuint8 *)"xvid"; // system case RMdetector3_streamType_SYSTEM_ASF: return (RMuint8 *)"system_asf"; case RMdetector3_streamType_SYSTEM_AVI: return (RMuint8 *)"system_avi"; case RMdetector3_streamType_SYSTEM_DVD: return (RMuint8 *)"system_dvd"; case RMdetector3_streamType_SYSTEM_ID3: return (RMuint8 *)"system_id3"; case RMdetector3_streamType_SYSTEM_M1S: return (RMuint8 *)"system_m1s"; case RMdetector3_streamType_SYSTEM_M2P: return (RMuint8 *)"system_m2p"; case RMdetector3_streamType_SYSTEM_M2T: return (RMuint8 *)"system_m2t"; case RMdetector3_streamType_SYSTEM_M2T_192: return (RMuint8 *)"system_m2t_192"; case RMdetector3_streamType_SYSTEM_MP4: return (RMuint8 *)"system_mp4"; case RMdetector3_streamType_SYSTEM_RIFFCDXA: return (RMuint8 *)"system_riff/cdxa"; case RMdetector3_streamType_SYSTEM_RIFFWAVE: return (RMuint8 *)"system_riff/wave"; } return (RMuint8 *)"unknown";}static void system_stream_callback(void *context, struct RM_Detection3_Specific_Info info, RMuint32 parentStreamID, RMuint32 streamID){ RMuint32 i; if (parentStreamID == streamID) g_currentRootStreamID = streamID; if (parentStreamID != g_currentRootStreamID) { g_nestingLevel++; for (i = 0; i < g_nestingLevel; i++) fprintf(stderr, "\t"); } g_currentRootStreamID = streamID; fprintf(stderr, "[%2lu %2lu ] %s\n", parentStreamID, streamID, print_type(info.type)); // get specific data. switch (info.type) { case RMdetector3_streamType_UNKNOWN: case RMdetector3_streamType_ELEMENTARY_AUDIO: case RMdetector3_streamType_ELEMENTARY_VIDEO: case RMdetector3_streamType_SYSTEM: break; // elementary audio case RMdetector3_streamType_AUDIO_AC3: case RMdetector3_streamType_AUDIO_ADIF: case RMdetector3_streamType_AUDIO_ADTS: case RMdetector3_streamType_AUDIO_DTS: case RMdetector3_streamType_AUDIO_DVD: case RMdetector3_streamType_AUDIO_MPEG1: //unused? case RMdetector3_streamType_AUDIO_MPEG1_LAYER3: case RMdetector3_streamType_AUDIO_MPEG2: //unused? case RMdetector3_streamType_AUDIO_MPEG2_LAYER1: case RMdetector3_streamType_AUDIO_MPEG2_LAYER2: case RMdetector3_streamType_AUDIO_MPEG2_LAYER3: case RMdetector3_streamType_AUDIO_PCM: case RMdetector3_streamType_AUDIO_REVERSE_PCM: case RMdetector3_streamType_AUDIO_WMA: case RMdetector3_streamType_AUDIO_WMAPRO: case RMdetector3_streamType_AUDIO_WMATS: case RMdetector3_streamType_AUDIO_LATM: break; // pictures case RMdetector3_streamType_BMP: case RMdetector3_streamType_JPEG: case RMdetector3_streamType_TIFF: case RMdetector3_streamType_PNG: case RMdetector3_streamType_GIF: break; // elementary video case RMdetector3_streamType_VIDEO_DIVX3: case RMdetector3_streamType_VIDEO_DIVX4: case RMdetector3_streamType_VIDEO_H263: case RMdetector3_streamType_VIDEO_H264: case RMdetector3_streamType_VIDEO_MJPEG: case RMdetector3_streamType_VIDEO_MPEG12: case RMdetector3_streamType_VIDEO_MPEG4: case RMdetector3_streamType_VIDEO_VC1: case RMdetector3_streamType_VIDEO_WMV: case RMdetector3_streamType_VIDEO_XVID: break; // system case RMdetector3_streamType_SYSTEM_ASF: case RMdetector3_streamType_SYSTEM_AVI: case RMdetector3_streamType_SYSTEM_DVD: break; case RMdetector3_streamType_SYSTEM_ID3: fprintf(stderr, "ID3: bitstream offset %lu\n", info.data.system.data.id3.bitstream_offset); break; case RMdetector3_streamType_SYSTEM_M1S: case RMdetector3_streamType_SYSTEM_M2P: case RMdetector3_streamType_SYSTEM_M2T: case RMdetector3_streamType_SYSTEM_M2T_192: case RMdetector3_streamType_SYSTEM_MP4: case RMdetector3_streamType_SYSTEM_RIFFCDXA: case RMdetector3_streamType_SYSTEM_RIFFWAVE: break; } return;}static void video_stream_callback(void *context, struct RM_Detection3_Specific_Info info, RMuint32 parentStreamID, RMuint32 streamID){ RMuint32 i; if (parentStreamID == g_currentRootStreamID) { for (i = 0; i < g_nestingLevel + 1; i++) fprintf(stderr, "\t"); } fprintf(stderr, "[%2lu %2lu ] %s", parentStreamID, streamID, print_type(info.type)); if (!info.data.video.PID_INFO_VALID) fprintf(stderr, "\n"); else fprintf(stderr, " (pid=%lu [0x%lx] subid=%lu [0x%lx] pidType=%lu [0x%lx])\n", info.data.video.pid, info.data.video.pid, info.data.video.subid, info.data.video.subid, info.data.video.pidType, info.data.video.pidType); // get specific data //RMDetector3GetStreamSpecificInfo(context, streamNum, type, &info); // big switch... switch (info.type) { case RMdetector3_streamType_UNKNOWN: case RMdetector3_streamType_ELEMENTARY_AUDIO: case RMdetector3_streamType_ELEMENTARY_VIDEO: case RMdetector3_streamType_SYSTEM: break; // elementary audio case RMdetector3_streamType_AUDIO_AC3: case RMdetector3_streamType_AUDIO_ADIF: case RMdetector3_streamType_AUDIO_ADTS: case RMdetector3_streamType_AUDIO_DTS: case RMdetector3_streamType_AUDIO_DVD: case RMdetector3_streamType_AUDIO_MPEG1: //unused? case RMdetector3_streamType_AUDIO_MPEG1_LAYER3: case RMdetector3_streamType_AUDIO_MPEG2: //unused? case RMdetector3_streamType_AUDIO_MPEG2_LAYER1: case RMdetector3_streamType_AUDIO_MPEG2_LAYER2: case RMdetector3_streamType_AUDIO_MPEG2_LAYER3: case RMdetector3_streamType_AUDIO_PCM: case RMdetector3_streamType_AUDIO_REVERSE_PCM: case RMdetector3_streamType_AUDIO_WMA: case RMdetector3_streamType_AUDIO_WMAPRO: case RMdetector3_streamType_AUDIO_WMATS: case RMdetector3_streamType_AUDIO_LATM: break; // pictures case RMdetector3_streamType_BMP: case RMdetector3_streamType_JPEG: case RMdetector3_streamType_TIFF: case RMdetector3_streamType_PNG: case RMdetector3_streamType_GIF: break; // elementary video case RMdetector3_streamType_VIDEO_DIVX3: case RMdetector3_streamType_VIDEO_DIVX4: case RMdetector3_streamType_VIDEO_H263: case RMdetector3_streamType_VIDEO_H264: case RMdetector3_streamType_VIDEO_MJPEG: case RMdetector3_streamType_VIDEO_MPEG12: case RMdetector3_streamType_VIDEO_MPEG4: if (info.data.video.skipNCP)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -