| 287 | } |
| 288 | |
| 289 | static void print_codec(const AVCodec *c) |
| 290 | { |
| 291 | int encoder = av_codec_is_encoder(c); |
| 292 | AVBPrint desc; |
| 293 | |
| 294 | printf("%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name, |
| 295 | c->long_name ? c->long_name : ""); |
| 296 | |
| 297 | printf(" General capabilities: "); |
| 298 | if (c->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND) |
| 299 | printf("horizband "); |
| 300 | if (c->capabilities & AV_CODEC_CAP_DR1) |
| 301 | printf("dr1 "); |
| 302 | if (c->capabilities & AV_CODEC_CAP_DELAY) |
| 303 | printf("delay "); |
| 304 | if (c->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) |
| 305 | printf("small "); |
| 306 | if (c->capabilities & AV_CODEC_CAP_EXPERIMENTAL) |
| 307 | printf("exp "); |
| 308 | if (c->capabilities & AV_CODEC_CAP_CHANNEL_CONF) |
| 309 | printf("chconf "); |
| 310 | if (c->capabilities & AV_CODEC_CAP_PARAM_CHANGE) |
| 311 | printf("paramchange "); |
| 312 | if (c->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE) |
| 313 | printf("variable "); |
| 314 | if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | |
| 315 | AV_CODEC_CAP_SLICE_THREADS | |
| 316 | AV_CODEC_CAP_OTHER_THREADS)) |
| 317 | printf("threads "); |
| 318 | if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING) |
| 319 | printf("avoidprobe "); |
| 320 | if (c->capabilities & AV_CODEC_CAP_HARDWARE) |
| 321 | printf("hardware "); |
| 322 | if (c->capabilities & AV_CODEC_CAP_HYBRID) |
| 323 | printf("hybrid "); |
| 324 | if (!c->capabilities) |
| 325 | printf("none"); |
| 326 | printf("\n"); |
| 327 | |
| 328 | if (c->type == AVMEDIA_TYPE_VIDEO || |
| 329 | c->type == AVMEDIA_TYPE_AUDIO) { |
| 330 | printf(" Threading capabilities: "); |
| 331 | switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | |
| 332 | AV_CODEC_CAP_SLICE_THREADS | |
| 333 | AV_CODEC_CAP_OTHER_THREADS)) { |
| 334 | case AV_CODEC_CAP_FRAME_THREADS | |
| 335 | AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break; |
| 336 | case AV_CODEC_CAP_FRAME_THREADS: printf("frame"); break; |
| 337 | case AV_CODEC_CAP_SLICE_THREADS: printf("slice"); break; |
| 338 | case AV_CODEC_CAP_OTHER_THREADS: printf("other"); break; |
| 339 | default: printf("none"); break; |
| 340 | } |
| 341 | printf("\n"); |
| 342 | } |
| 343 | |
| 344 | if (avcodec_get_hw_config(c, 0)) { |
| 345 | printf(" Supported hardware devices: "); |
| 346 | for (int i = 0;; i++) { |
no test coverage detected