• 大小: 656KB
    文件类型: .tar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: C/C++
  • 标签: v4l2  mfc  视频解码  

资源简介

基于三星arm平台 mfc5.1 v4l2 mfc视频解码 参考代码

资源截图

代码片段和文件信息

/*
 * V4L2 Codec decoding example application
 * Kamil Debski 
 *
 * 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 
#include 
#include 
#include 

#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  - The codec of the encoded stream\n“);
printf(“\t\t     Available codecs: mpeg4 h264\n“);
printf(“\t-d   - frame buffer device (e.g. /dev/fb0)\n“);
printf(“\t-f  - FIMC device (e.g. /dev/video4)\n“);
printf(“\t-i  - Input file name\n“);
printf(“\t-m  - MFC device (e.g. /dev/video8)\n“);
printf(“\t-V - synchronise to vsync\n“);
//printf(“\t-  - \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;
} else if (strncasecmp(“h263“ str 5) == 0) {
return V4L2_PIX_FMT_H263;
} else if (strncasecmp(“xvid“ str 5) == 0) {
return V4L2_PIX_FMT_XVID;
} else if (strncasecmp(“mpeg2“ str 5) == 0) {
return V4L2_PIX_FMT_MPEG2;
} else if (strncasecmp(“mpeg1“ str 5) == 0) {
return V4L2_PIX_FMT_MPEG1;
}
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_XVID:
case V4L2_PIX_FMT_H263:
case V4L2_PIX_FMT_MPEG4:
i->parser.func = parse_mpeg4_stream;
break;
case V4L2_PIX_FMT_H264:
i->parser.func = parse_h264_stream;
break;
case V4L2_PIX_FMT_MPEG1:
case V4L2_PIX_FMT_MPEG2:

评论

共有 条评论