12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 下面简单介绍一下遍历ffmpeg中的解码器信息的方法(这些解码器以一个链表的形式存储):
- 1.注册所有编解码器:av_register_all();
- 2.声明一个AVCodec类型的指针,比如说AVCodec* p;
- 3.调用av_codec_next()函数,即可获得指向链表下一个解码器的指针,循环往复可以获得所有解码器的信息。注意,如果想要获得指向第一个解码器的指针,则需要将该函数的参数设置为NULL。
- /**
- * If c is NULL, returns the first registered codec,
- * if c is non-NULL, returns the next registered codec after c,
- * or NULL if c is the last one.
- */
- int getSupportCodecs(void)
- {
- char *info = (char *)malloc(40000);
- memset(info, 0, 40000);
- av_register_all();
- AVCodec *c_temp = av_codec_next(NULL);
- while (c_temp != NULL)
- {
- if (c_temp->decode != NULL)
- {
- strcat(info, "[Decode]");
- }
- else
- {
- strcat(info, "[Encode]");
- }
- switch (c_temp->type)
- {
- case AVMEDIA_TYPE_VIDEO:
- strcat(info, "[Video]");
- break;
- case AVMEDIA_TYPE_AUDIO:
- strcat(info, "[Audeo]");
- break;
- default:
- strcat(info, "[Other]");
- break;
- }
- sprintf(info, "%s %10s\n", info, c_temp->name);
- c_temp = c_temp->next;
- }
- fprintf(stderr, "%s %s\n", __FUNCTION__, info);
- free(info);
- return 0;
- }
|