| 1548 | } |
| 1549 | |
| 1550 | static void print_codecs(int encoder) |
| 1551 | { |
| 1552 | const AVCodecDescriptor **codecs; |
| 1553 | unsigned i, nb_codecs = get_codecs_sorted(&codecs); |
| 1554 | |
| 1555 | printf("%s:\n" |
| 1556 | " V..... = Video\n" |
| 1557 | " A..... = Audio\n" |
| 1558 | " S..... = Subtitle\n" |
| 1559 | " .F.... = Frame-level multithreading\n" |
| 1560 | " ..S... = Slice-level multithreading\n" |
| 1561 | " ...X.. = Codec is experimental\n" |
| 1562 | " ....B. = Supports draw_horiz_band\n" |
| 1563 | " .....D = Supports direct rendering method 1\n" |
| 1564 | " ------\n", |
| 1565 | encoder ? "Encoders" : "Decoders"); |
| 1566 | for (i = 0; i < nb_codecs; i++) { |
| 1567 | const AVCodecDescriptor *desc = codecs[i]; |
| 1568 | const AVCodec *codec = NULL; |
| 1569 | |
| 1570 | while ((codec = next_codec_for_id(desc->id, codec, encoder))) { |
| 1571 | printf(" %c", get_media_type_char(desc->type)); |
| 1572 | printf((codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : "."); |
| 1573 | printf((codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : "."); |
| 1574 | printf((codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : "."); |
| 1575 | printf((codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : "."); |
| 1576 | printf((codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : "."); |
| 1577 | |
| 1578 | printf(" %-20s %s", codec->name, codec->long_name ? codec->long_name : ""); |
| 1579 | if (strcmp(codec->name, desc->name)) |
| 1580 | printf(" (codec %s)", desc->name); |
| 1581 | |
| 1582 | printf("\n"); |
| 1583 | } |
| 1584 | } |
| 1585 | av_free(codecs); |
| 1586 | } |
| 1587 | |
| 1588 | int show_decoders(void *optctx, const char *opt, const char *arg) |
| 1589 | { |
no test coverage detected