⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lqt_ffmpeg.c

📁 这个库实现了录象功能
💻 C
📖 第 1 页 / 共 3 页
字号:
      .index = -1,      .encoder = NULL,      .decoder = NULL,      .short_name = "adpcm_ms",      .name = TRS("FFMPEG McRowsoft ADPCM"),      .fourccs = { "ms\0\x02", "MS\0\x02", (char*)0 },      .wav_ids = { 0x02, LQT_WAV_ID_NONE },    },#endif#if 1    /* Sounds ugly */    {      .id = CODEC_ID_ADPCM_IMA_WAV,      .index = -1,      .encoder = NULL,      .decoder = NULL,      .short_name = "ima_adpcm_wav",      .name = TRS("FFMPEG ADPCM ima WAV"),      .fourccs = { "ms\0\x11", "MS\0\x11", (char*)0 },      .wav_ids = { 0x11, LQT_WAV_ID_NONE },    }#endif  };#define NUMMAPS_A ((int)(sizeof(codecidmap_a)/sizeof(struct CODECIDMAP)))#define NUMMAPS_V ((int)(sizeof(codecidmap_v)/sizeof(struct CODECIDMAP)))// static void ffmpeg_map_init(void) __attribute__ ((constructor));static void ffmpeg_map_init(void)  {  int i;  if(ffmpeg_num_video_codecs >= 0)    {    return;    }      avcodec_register_all();  avcodec_init();  ffmpeg_num_video_codecs = 0;  ffmpeg_num_audio_codecs = 0;    for(i = 0; i < NUMMAPS_V; i++)    {    if(codecidmap_v[i].do_encode)      codecidmap_v[i].encoder = avcodec_find_encoder(codecidmap_v[i].id);    codecidmap_v[i].decoder = avcodec_find_decoder(codecidmap_v[i].id);    if(codecidmap_v[i].encoder || codecidmap_v[i].decoder)      {      codecidmap_v[i].index = ffmpeg_num_video_codecs++;      }    }  for(i = 0; i < NUMMAPS_A; i++)    {    if(codecidmap_a[i].do_encode)      codecidmap_a[i].encoder = avcodec_find_encoder(codecidmap_a[i].id);    codecidmap_a[i].decoder = avcodec_find_decoder(codecidmap_a[i].id);    if(codecidmap_a[i].encoder || codecidmap_a[i].decoder)      {      codecidmap_a[i].index = ffmpeg_num_audio_codecs++ + ffmpeg_num_video_codecs;      }    }  }/* Template */static char ffmpeg_name[256];static char ffmpeg_long_name[256];static char ffmpeg_description[256];static lqt_codec_info_static_t codec_info_ffmpeg =  {    .name =                ffmpeg_name,    .long_name =           ffmpeg_long_name,    .description =         ffmpeg_description,    .fourccs =             NULL,    .wav_ids =             NULL,    .type =                0,    .direction =           0,    .encoding_parameters = NULL,    .decoding_parameters = NULL  };/* These are called from the plugin loader */LQT_EXTERN int get_num_codecs(){	ffmpeg_map_init();	return ffmpeg_num_video_codecs + ffmpeg_num_audio_codecs;}static void set_codec_info(struct CODECIDMAP * map)  {  // char * capabilities = (char*)0;  codec_info_ffmpeg.fourccs = map->fourccs;  codec_info_ffmpeg.wav_ids = map->wav_ids;  if(map->encoder && map->decoder)    {    codec_info_ffmpeg.direction = LQT_DIRECTION_BOTH;    codec_info_ffmpeg.encoding_parameters = map->encode_parameters;    codec_info_ffmpeg.decoding_parameters = map->decode_parameters;    //    capabilities = "Codec";    codec_info_ffmpeg.compatibility_flags = map->compatibility_flags;    }  else if(map->encoder)    {    codec_info_ffmpeg.direction = LQT_DIRECTION_ENCODE;    codec_info_ffmpeg.encoding_parameters = map->encode_parameters;    codec_info_ffmpeg.decoding_parameters = NULL;    codec_info_ffmpeg.compatibility_flags = map->compatibility_flags;    //    capabilities = "Encoder";    }  else if(map->decoder)    {    codec_info_ffmpeg.direction = LQT_DIRECTION_DECODE;    codec_info_ffmpeg.encoding_parameters = NULL;    codec_info_ffmpeg.decoding_parameters = map->decode_parameters;    //    capabilities = "Decoder";    }  snprintf(ffmpeg_name, 256, "ffmpeg_%s", map->short_name);  snprintf(ffmpeg_long_name, 256, "%s", map->name);  snprintf(ffmpeg_description, 256, "%s", map->name);    if((map->encoder && (map->encoder->type == CODEC_TYPE_VIDEO)) ||     (map->decoder && (map->decoder->type == CODEC_TYPE_VIDEO))){       codec_info_ffmpeg.type = LQT_CODEC_VIDEO;  } else {       codec_info_ffmpeg.type = LQT_CODEC_AUDIO;  }  }static struct CODECIDMAP * find_codec(int index)  {  int i;  for(i = 0; i < NUMMAPS_V; i++)    {    if(codecidmap_v[i].index == index)      return &codecidmap_v[i];    }  for(i = 0; i < NUMMAPS_A; i++)    {    if(codecidmap_a[i].index == index)      return &codecidmap_a[i];    }  return (struct CODECIDMAP *)0;  }LQT_EXTERN lqt_codec_info_static_t * get_codec_info(int index){	struct CODECIDMAP * map;        ffmpeg_map_init();	map = find_codec(index);        //        memset(&codec_info_ffmpeg, 0, sizeof(codec_info_ffmpeg));        if(map)          {          set_codec_info(map);          return &codec_info_ffmpeg;          }	return NULL;}/* *   Return the actual codec constructor *//*    This is where it gets ugly - make sure there are enough dummys to    handle all codecs!*/#define IFUNC(x) \static void quicktime_init_video_codec_ffmpeg ## x(quicktime_video_map_t *vtrack) \{ \	int i; \	for(i = 0; i < ffmpeg_num_video_codecs; i++) { \		if(codecidmap_v[i].index == x) { \                     quicktime_init_video_codec_ffmpeg(vtrack, \				codecidmap_v[i].encoder, \				codecidmap_v[i].decoder); \		} \	} \}IFUNC(0)IFUNC(1)IFUNC(2)IFUNC(3)IFUNC(4)IFUNC(5)IFUNC(6)IFUNC(7)IFUNC(8)IFUNC(9)IFUNC(10)IFUNC(11)IFUNC(12)IFUNC(13)IFUNC(14)IFUNC(15)IFUNC(16)IFUNC(17)IFUNC(18)IFUNC(19)IFUNC(20)IFUNC(21)IFUNC(22)IFUNC(23)IFUNC(24)IFUNC(25)IFUNC(26)IFUNC(27)IFUNC(28)IFUNC(29)IFUNC(30)IFUNC(31)IFUNC(32)IFUNC(33)IFUNC(34)IFUNC(35)IFUNC(36)IFUNC(37)IFUNC(38)IFUNC(39)IFUNC(40)#undef IFUNC#define MAX_VIDEO_FUNC 40#define IFUNC(x) \static void quicktime_init_audio_codec_ffmpeg ## x(quicktime_audio_map_t *atrack) \{ \	int i; \	for(i = 0; i < ffmpeg_num_audio_codecs; i++) { \		if(codecidmap_a[i].index == x) { \                      quicktime_init_audio_codec_ffmpeg(atrack, \				codecidmap_a[i].encoder, \				codecidmap_a[i].decoder); \		} \	} \}IFUNC(0)IFUNC(1)IFUNC(2)IFUNC(3)IFUNC(4)IFUNC(5)IFUNC(6)IFUNC(7)IFUNC(8)IFUNC(9)IFUNC(10)IFUNC(11)IFUNC(12)IFUNC(13)IFUNC(14)IFUNC(15)IFUNC(16)IFUNC(17)IFUNC(18)IFUNC(19)IFUNC(20)IFUNC(21)IFUNC(22)IFUNC(23)IFUNC(24)IFUNC(25)IFUNC(26)IFUNC(27)IFUNC(28)IFUNC(29)IFUNC(30)IFUNC(31)IFUNC(32)IFUNC(33)IFUNC(34)IFUNC(35)IFUNC(36)IFUNC(37)IFUNC(38)IFUNC(39)IFUNC(40)#define MAX_AUDIO_FUNC 40     #undef IFUNCLQT_EXTERN lqt_init_video_codec_func_t get_video_codec(int index){	ffmpeg_map_init();	if(index > MAX_VIDEO_FUNC) {		lqt_log(NULL, LQT_LOG_ERROR, LOG_DOMAIN,                        "Video index too large: %d", index);		return NULL;	}	switch(index) {		case 0: return quicktime_init_video_codec_ffmpeg0;		case 1: return quicktime_init_video_codec_ffmpeg1;		case 2:	return quicktime_init_video_codec_ffmpeg2;		case 3:	return quicktime_init_video_codec_ffmpeg3;		case 4:	return quicktime_init_video_codec_ffmpeg4;		case 5:	return quicktime_init_video_codec_ffmpeg5;		case 6:	return quicktime_init_video_codec_ffmpeg6;		case 7:	return quicktime_init_video_codec_ffmpeg7;		case 8:	return quicktime_init_video_codec_ffmpeg8;		case 9:	return quicktime_init_video_codec_ffmpeg9;		case 10: return quicktime_init_video_codec_ffmpeg10;		case 11: return quicktime_init_video_codec_ffmpeg11;		case 12: return quicktime_init_video_codec_ffmpeg12;		case 13: return quicktime_init_video_codec_ffmpeg13;		case 14: return quicktime_init_video_codec_ffmpeg14;		case 15: return quicktime_init_video_codec_ffmpeg15;		case 16: return quicktime_init_video_codec_ffmpeg16;		case 17: return quicktime_init_video_codec_ffmpeg17;		case 18: return quicktime_init_video_codec_ffmpeg18;		case 19: return quicktime_init_video_codec_ffmpeg19;		case 20: return quicktime_init_video_codec_ffmpeg20;		case 21: return quicktime_init_video_codec_ffmpeg21;		case 22: return quicktime_init_video_codec_ffmpeg22;		case 23: return quicktime_init_video_codec_ffmpeg23;		case 24: return quicktime_init_video_codec_ffmpeg24;		case 25: return quicktime_init_video_codec_ffmpeg25;		case 26: return quicktime_init_video_codec_ffmpeg26;		case 27: return quicktime_init_video_codec_ffmpeg27;		case 28: return quicktime_init_video_codec_ffmpeg28;		case 29: return quicktime_init_video_codec_ffmpeg29;		case 30: return quicktime_init_video_codec_ffmpeg30;		case 31: return quicktime_init_video_codec_ffmpeg31;		case 32: return quicktime_init_video_codec_ffmpeg32;		case 33: return quicktime_init_video_codec_ffmpeg33;		case 34: return quicktime_init_video_codec_ffmpeg34;		case 35: return quicktime_init_video_codec_ffmpeg35;		case 36: return quicktime_init_video_codec_ffmpeg36;		case 37: return quicktime_init_video_codec_ffmpeg37;		case 38: return quicktime_init_video_codec_ffmpeg38;		case 39: return quicktime_init_video_codec_ffmpeg39;		case 40: return quicktime_init_video_codec_ffmpeg40;		default:			break;	}	return (lqt_init_video_codec_func_t)0;}LQT_EXTERN lqt_init_audio_codec_func_t get_audio_codec(int index){	ffmpeg_map_init();	if(index > MAX_AUDIO_FUNC) {		lqt_log(NULL, LQT_LOG_ERROR, LOG_DOMAIN,                        "Audio index too large: %d", index);		return NULL;	}	switch(index) {		case 0: return quicktime_init_audio_codec_ffmpeg0;		case 1: return quicktime_init_audio_codec_ffmpeg1;		case 2:	return quicktime_init_audio_codec_ffmpeg2;		case 3:	return quicktime_init_audio_codec_ffmpeg3;		case 4:	return quicktime_init_audio_codec_ffmpeg4;		case 5:	return quicktime_init_audio_codec_ffmpeg5;		case 6:	return quicktime_init_audio_codec_ffmpeg6;		case 7:	return quicktime_init_audio_codec_ffmpeg7;		case 8:	return quicktime_init_audio_codec_ffmpeg8;		case 9:	return quicktime_init_audio_codec_ffmpeg9;		case 10: return quicktime_init_audio_codec_ffmpeg10;		case 11: return quicktime_init_audio_codec_ffmpeg11;		case 12: return quicktime_init_audio_codec_ffmpeg12;		case 13: return quicktime_init_audio_codec_ffmpeg13;		case 14: return quicktime_init_audio_codec_ffmpeg14;		case 15: return quicktime_init_audio_codec_ffmpeg15;		case 16: return quicktime_init_audio_codec_ffmpeg16;		case 17: return quicktime_init_audio_codec_ffmpeg17;		case 18: return quicktime_init_audio_codec_ffmpeg18;		case 19: return quicktime_init_audio_codec_ffmpeg19;		case 20: return quicktime_init_audio_codec_ffmpeg20;		case 21: return quicktime_init_audio_codec_ffmpeg21;		case 22: return quicktime_init_audio_codec_ffmpeg22;		case 23: return quicktime_init_audio_codec_ffmpeg23;		case 24: return quicktime_init_audio_codec_ffmpeg24;		case 25: return quicktime_init_audio_codec_ffmpeg25;		case 26: return quicktime_init_audio_codec_ffmpeg26;		case 27: return quicktime_init_audio_codec_ffmpeg27;		case 28: return quicktime_init_audio_codec_ffmpeg28;		case 29: return quicktime_init_audio_codec_ffmpeg29;                case 30: return quicktime_init_audio_codec_ffmpeg30;		case 31: return quicktime_init_audio_codec_ffmpeg31;		case 32: return quicktime_init_audio_codec_ffmpeg32;		case 33: return quicktime_init_audio_codec_ffmpeg33;		case 34: return quicktime_init_audio_codec_ffmpeg34;		case 35: return quicktime_init_audio_codec_ffmpeg35;		case 36: return quicktime_init_audio_codec_ffmpeg36;		case 37: return quicktime_init_audio_codec_ffmpeg37;		case 38: return quicktime_init_audio_codec_ffmpeg38;		case 39: return quicktime_init_audio_codec_ffmpeg39;		case 40: return quicktime_init_audio_codec_ffmpeg40;		default:			break;	}	return (lqt_init_audio_codec_func_t)0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -