yading@11
|
1 /*
|
yading@11
|
2 * Copyright (c) 2012 Stefano Sabatini
|
yading@11
|
3 *
|
yading@11
|
4 * This file is part of FFmpeg.
|
yading@11
|
5 *
|
yading@11
|
6 * FFmpeg is free software; you can redistribute it and/or
|
yading@11
|
7 * modify it under the terms of the GNU Lesser General Public
|
yading@11
|
8 * License as published by the Free Software Foundation; either
|
yading@11
|
9 * version 2.1 of the License, or (at your option) any later version.
|
yading@11
|
10 *
|
yading@11
|
11 * FFmpeg is distributed in the hope that it will be useful,
|
yading@11
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
yading@11
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
yading@11
|
14 * Lesser General Public License for more details.
|
yading@11
|
15 *
|
yading@11
|
16 * You should have received a copy of the GNU Lesser General Public
|
yading@11
|
17 * License along with FFmpeg; if not, write to the Free Software
|
yading@11
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
yading@11
|
19 */
|
yading@11
|
20
|
yading@11
|
21 #include "config.h"
|
yading@11
|
22 #if HAVE_UNISTD_H
|
yading@11
|
23 #include <unistd.h> /* getopt */
|
yading@11
|
24 #endif
|
yading@11
|
25
|
yading@11
|
26 #include "libavutil/pixdesc.h"
|
yading@11
|
27 #include "libavcodec/avcodec.h"
|
yading@11
|
28 #include "libavutil/common.h"
|
yading@11
|
29 #include "libavcodec/raw.h"
|
yading@11
|
30
|
yading@11
|
31 #undef printf
|
yading@11
|
32 #undef fprintf
|
yading@11
|
33
|
yading@11
|
34 #if !HAVE_GETOPT
|
yading@11
|
35 #include "compat/getopt.c"
|
yading@11
|
36 #endif
|
yading@11
|
37
|
yading@11
|
38 static void usage(void)
|
yading@11
|
39 {
|
yading@11
|
40 printf("Show the relationships between rawvideo pixel formats and FourCC tags.\n");
|
yading@11
|
41 printf("usage: fourcc2pixfmt [OPTIONS]\n");
|
yading@11
|
42 printf("\n"
|
yading@11
|
43 "Options:\n"
|
yading@11
|
44 "-l list the pixel format for each fourcc\n"
|
yading@11
|
45 "-L list the fourccs for each pixel format\n"
|
yading@11
|
46 "-p PIX_FMT given a pixel format, print the list of associated fourccs (one per line)\n"
|
yading@11
|
47 "-h print this help\n");
|
yading@11
|
48 }
|
yading@11
|
49
|
yading@11
|
50 static void print_pix_fmt_fourccs(enum AVPixelFormat pix_fmt, char sep)
|
yading@11
|
51 {
|
yading@11
|
52 int i;
|
yading@11
|
53
|
yading@11
|
54 for (i = 0; ff_raw_pix_fmt_tags[i].pix_fmt != AV_PIX_FMT_NONE; i++) {
|
yading@11
|
55 if (ff_raw_pix_fmt_tags[i].pix_fmt == pix_fmt) {
|
yading@11
|
56 char buf[32];
|
yading@11
|
57 av_get_codec_tag_string(buf, sizeof(buf), ff_raw_pix_fmt_tags[i].fourcc);
|
yading@11
|
58 printf("%s%c", buf, sep);
|
yading@11
|
59 }
|
yading@11
|
60 }
|
yading@11
|
61 }
|
yading@11
|
62
|
yading@11
|
63 int main(int argc, char **argv)
|
yading@11
|
64 {
|
yading@11
|
65 int i, list_fourcc_pix_fmt = 0, list_pix_fmt_fourccs = 0;
|
yading@11
|
66 const char *pix_fmt_name = NULL;
|
yading@11
|
67 char c;
|
yading@11
|
68
|
yading@11
|
69 if (argc == 1) {
|
yading@11
|
70 usage();
|
yading@11
|
71 return 0;
|
yading@11
|
72 }
|
yading@11
|
73
|
yading@11
|
74 while ((c = getopt(argc, argv, "hp:lL")) != -1) {
|
yading@11
|
75 switch (c) {
|
yading@11
|
76 case 'h':
|
yading@11
|
77 usage();
|
yading@11
|
78 return 0;
|
yading@11
|
79 case 'l':
|
yading@11
|
80 list_fourcc_pix_fmt = 1;
|
yading@11
|
81 break;
|
yading@11
|
82 case 'L':
|
yading@11
|
83 list_pix_fmt_fourccs = 1;
|
yading@11
|
84 break;
|
yading@11
|
85 case 'p':
|
yading@11
|
86 pix_fmt_name = optarg;
|
yading@11
|
87 break;
|
yading@11
|
88 case '?':
|
yading@11
|
89 usage();
|
yading@11
|
90 return 1;
|
yading@11
|
91 }
|
yading@11
|
92 }
|
yading@11
|
93
|
yading@11
|
94 if (list_fourcc_pix_fmt) {
|
yading@11
|
95 for (i = 0; ff_raw_pix_fmt_tags[i].pix_fmt != AV_PIX_FMT_NONE; i++) {
|
yading@11
|
96 char buf[32];
|
yading@11
|
97 av_get_codec_tag_string(buf, sizeof(buf), ff_raw_pix_fmt_tags[i].fourcc);
|
yading@11
|
98 printf("%s: %s\n", buf, av_get_pix_fmt_name(ff_raw_pix_fmt_tags[i].pix_fmt));
|
yading@11
|
99 }
|
yading@11
|
100 }
|
yading@11
|
101
|
yading@11
|
102 if (list_pix_fmt_fourccs) {
|
yading@11
|
103 for (i = 0; i < AV_PIX_FMT_NB; i++) {
|
yading@11
|
104 const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(i);
|
yading@11
|
105 if (!pix_desc->name || pix_desc->flags & PIX_FMT_HWACCEL)
|
yading@11
|
106 continue;
|
yading@11
|
107 printf("%s: ", pix_desc->name);
|
yading@11
|
108 print_pix_fmt_fourccs(i, ' ');
|
yading@11
|
109 printf("\n");
|
yading@11
|
110 }
|
yading@11
|
111 }
|
yading@11
|
112
|
yading@11
|
113 if (pix_fmt_name) {
|
yading@11
|
114 enum AVPixelFormat pix_fmt = av_get_pix_fmt(pix_fmt_name);
|
yading@11
|
115 if (pix_fmt == AV_PIX_FMT_NONE) {
|
yading@11
|
116 fprintf(stderr, "Invalid pixel format selected '%s'\n", pix_fmt_name);
|
yading@11
|
117 return 1;
|
yading@11
|
118 }
|
yading@11
|
119 print_pix_fmt_fourccs(pix_fmt, '\n');
|
yading@11
|
120 }
|
yading@11
|
121
|
yading@11
|
122 return 0;
|
yading@11
|
123 }
|