annotate ffmpeg/tools/fourcc2pixfmt.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
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 }