diff options
author | Kamil Debski <k.debski@samsung.com> | 2012-03-06 10:33:02 +0100 |
---|---|---|
committer | Kamil Debski <k.debski@samsung.com> | 2012-03-06 12:16:20 +0100 |
commit | 5aaeaa28e782647843570f01b4661a65ff3aa376 (patch) | |
tree | d49c0ab5a794bff3d730b26d05125db1c9cc6131 /v4l2-mfc-example/args.c | |
parent | 1e019840f788acda4cabae1baca5312c75b3d532 (diff) |
v4l-mfc-example: version 0.1
Diffstat (limited to 'v4l2-mfc-example/args.c')
-rw-r--r-- | v4l2-mfc-example/args.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/v4l2-mfc-example/args.c b/v4l2-mfc-example/args.c new file mode 100644 index 0000000..119bf22 --- /dev/null +++ b/v4l2-mfc-example/args.c @@ -0,0 +1,117 @@ +/* + * V4L2 Codec decoding example application + * Kamil Debski <k.debski@samsung.com> + * + * Argument parser + * + * Copyright 2012 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <linux/videodev2.h> + +#include "common.h" +#include "parser.h" + + +void print_usage(char *name) +{ + // "d:f:i:m:c:V" + printf("Usage:\n"); + printf("\t./%s\n", name); + printf("\t-c <codec> - The codec of the encoded stream\n"); + printf("\t\t Available codecs: mpeg4, h264\n"); + printf("\t-d <device> - Frame buffer device (e.g. /dev/fb0)\n"); + printf("\t-f <device> - FIMC device (e.g. /dev/video4)\n"); + printf("\t-i <file> - Input file name\n"); + printf("\t-m <device> - MFC device (e.g. /dev/video8)\n"); + printf("\t-V - synchronise to vsync\n"); + //printf("\t- <device> - \n"); + printf("\tp2\n"); + printf("\n"); +} + +void init_to_defaults(struct instance *i) +{ + memset(i, 0, sizeof(*i)); +} + +int get_codec(char *str) +{ + if (strncasecmp("mpeg4", str, 5) == 0) { + return V4L2_PIX_FMT_MPEG4; + } else if (strncasecmp("h264", str, 5) == 0) { + return V4L2_PIX_FMT_H264; + } + return 0; +} + +int parse_args(struct instance *i, int argc, char **argv) +{ + int c; + + init_to_defaults(i); + + while ((c = getopt(argc, argv, "c:d:f:i:m:V")) != -1) { + switch (c) { + case 'c': + i->parser.codec = get_codec(optarg); + break; + case 'd': + i->fb.name = optarg; + break; + case 'f': + i->fimc.name = optarg; + break; + case 'i': + i->in.name = optarg; + break; + case 'm': + i->mfc.name = optarg; + break; + case 'V': + i->fb.double_buf = 1; + break; + default: + err("Bad argument"); + return -1; + } + } + + if (!i->in.name || !i->fb.name || !i->fimc.name || !i->mfc.name) { + err("The following arguments are required: -d -f -i -m -c"); + return -1; + } + + if (!i->parser.codec) { + err("Unknown or not set codec (-c)"); + return -1; + } + + switch (i->parser.codec) { + case V4L2_PIX_FMT_MPEG4: + i->parser.func = parse_mpeg4_stream; + break; + case V4L2_PIX_FMT_H264: + i->parser.func = parse_h264_stream; + break; + } + + return 0; +} + |