免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3690 | 回复: 13

函数求优化 [复制链接]

论坛徽章:
0
发表于 2017-05-19 11:39 |显示全部楼层
本帖最后由 zhjwlgh01 于 2017-05-21 10:25 编辑

自己写了个函数,求大神优化$testCommand = 'gst-launch-1.0 qcarcamsrc dumpable=true input=0 ! video/x-raw, format=NV12, width=720, height=480, framerate=30/1 ! queue ! omxmpeg4videoenc ! avimux ! filesink location=/data/captured/camera0-D1-30fps-mpeg4.avi';


sub checkResult{
        my $cmd = undef;
        my $cmdresult = undef;
        my $recordFile = undef;
        my $line = undef;
        my $recordFileName = undef;
        my $dumpFormat = undef;
        my $playList = undef;
        my @recordFileName = ("cam" , "fromfile", "dump", "encoder","videosrcsh264enc"); # Used for getting the record file
        my @dumpFormat = (".avi", ".mkv", ".h263" , ".264" , ".h265" , ".NV12" , ".nv12" , ".dump" , ".mpeg4"); #Used for getting the dump file which can't be playback in the device
        my @playList = (".avi", ".mkv", ".h263" , ".264" , ".h265" ,".mpeg4"); #Used for checking the record file could be playback
        my $checkResult = CommonUtils::FAIL;

        #Got dunmp file name from the testCommand first;
        foreach $recordFile (split/\/+|\s/,$testCommand){
                foreach $recordFileName (@recordFileName){
                        if ($recordFile =~ /$recordFileName/){
                                foreach $dumpFormat (@dumpFormat){
                                        if ($recordFile =~ /$dumpFormat/ ){
                                                if( CommonUtils::isExists("$recordPath/$recordFile","-f")) {
                                                        Logger::log(Logger::INFORMATIONAL, "Found the recorded file: $recordFile");
                                                        foreach $playList (@playList){
                                                                if ($recordFile =~ /$playList/ ){
                                                                        $cmd = "adb shell su -c 'gst-play-1.0 $recordPath/$recordFile'";
                                                                        $cmdresult = Command::getOutput($cmd);
                                                                        foreach $line (split /\n/, $cmdresult) {
                                                                                Logger::log(Logger::INFORMATIONAL, $line);
                                                                                if($line =~ /Setting pipeline to PLAYING/) {
                                                                                        Logger::log(Logger::INFORMATIONAL, "\n play the recored file: $recordFile successfully\n");
                                                                                        $checkResult = CommonUtils::PASS;
                                                                                        return $checkResult;
                                                                                }
                                                                        }
                                                                        return $checkResult;
                                                                }
                                                        }
                                                        Logger::log(Logger::INFORMATIONAL, "\nRecord file $recordFile can't be played in the device, need check with special tool in PC side\n");
                                                        $checkResult = CommonUtils::PASS;
                                                        return $checkResult;
                                                }
                                                else{
                                                        Logger::log(Logger::INFORMATIONAL, "Can't find the recorded file: $recordFile");
                                                }
                                        }
                                }
                        }
                }
        }
        return $checkResult;
}


论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
发表于 2017-05-19 14:17 |显示全部楼层
发帖的时候先把表情禁用了,把代码用 code 标签扩起来,
[code]代码[/code]

foreach 改成 for,
左边花括号尽量转行。

话说是要优化性能吗……

论坛徽章:
0
发表于 2017-05-19 15:29 |显示全部楼层
回复 2# 523066680

受教了不是要优化性能,只是觉得写得很罗嗦。。所以想找大神缩短点

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
发表于 2017-05-19 16:30 |显示全部楼层
回复 3# zhjwlgh01

那你再编辑一下,在编辑界面下方有附加选项,在禁用表情前面打勾吧,不然代码里那几个表情实在懒得去替换。

论坛徽章:
0
发表于 2017-05-21 09:45 |显示全部楼层

本帖最后由 zhjwlgh01 于 2017-05-21 10:26 编辑

复制代码

论坛徽章:
0
发表于 2017-05-21 09:51 |显示全部楼层

删删删删删删删删删删删删

本帖最后由 zhjwlgh01 于 2017-05-21 10:27 编辑

删删删删删删删删

论坛徽章:
0
发表于 2017-05-21 09:51 |显示全部楼层

删删删删

本帖最后由 zhjwlgh01 于 2017-05-21 10:27 编辑

删删删删删删删删

论坛徽章:
0
发表于 2017-05-21 09:52 |显示全部楼层
下面是完整的函数,目的是取出testCommand 中包含的recordFile,然后再判断是否满足条件,满足条件的播放,不需要播放的直接过。条件基本就是几个数组。
  1. my $cmd = undef;
  2.         my $cmdresult = undef;
  3.         my $recordFile = undef;
  4.         my $line = undef;
  5.         my $recordFileName = undef;
  6.         my $dumpFormat = undef;
  7.         my $playList = undef;
  8.         my @recordFileName = ("cam" , "fromfile", "dump", "encoder","videosrcsh264enc"); # Used for getting the record file
  9.         my @dumpFormat = (".avi", ".mkv", ".h263" , ".264" , ".h265" , ".NV12" , ".nv12" , ".dump" , ".mpeg4", ".yuv" ); #Used for getting the dump file which can't be playback in the device
  10.         my @playList = (".avi", ".mkv", ".h263" , ".264" , ".h265" ,".mpeg4"); #Used for checking the record file could be playback
  11.         my @nonPlayList = (".NV12" , ".nv12" , ".dump", ".yuv" ); #core dump format, no need to play
  12.         my $checkResult = CommonUtils::FAIL;

  13.         #Got dunmp file name from the testCommand first;
  14.         foreach $recordFile (split/\/+|\s/,$testCommand){
  15.                 foreach $recordFileName (@recordFileName){
  16.                         if ($recordFile =~ /$recordFileName/){
  17.                                 foreach $dumpFormat (@dumpFormat){
  18.                                         #$checkResult = CommonUtils::FAIL;
  19.                                         if ($recordFile =~ /$dumpFormat/ ){
  20.                                                 if( CommonUtils::isExists("$recordPath/$recordFile","-f")) {
  21.                                                         Logger::log(Logger::INFORMATIONAL, "Found the recorded file: $recordFile");
  22.                                                         foreach $playList (@playList){
  23.                                                                 $checkResult = CommonUtils::FAIL;
  24.                                                                 if ($recordFile =~ /$playList/ ){
  25.                                                                         $cmd = "adb shell su -c 'gst-play-1.0 $recordPath/$recordFile'";
  26.                                                                         $cmdresult = Command::getOutput($cmd);
  27.                                                                         foreach $line (split /\n/, $cmdresult) {
  28.                                                                                 Logger::log(Logger::INFORMATIONAL, $line);
  29.                                                                                 if($line =~ /Setting pipeline to PLAYING/) {
  30.                                                                                         Logger::log(Logger::INFORMATIONAL, "\n play the recored file: $recordFile successfully\n");
  31.                                                                                         $checkResult = CommonUtils::PASS;
  32.                                                                                 }
  33.                                                                         }
  34.                                                                 }
  35.                                                         }
  36.                                                         foreach $playList (@nonPlayList){
  37.                                                                 if ($recordFile =~ /$playList/ ){
  38.                                                                         $checkResult = CommonUtils::PASS;
  39.                                                                 }
  40.                                                         }
  41.                                                         if ($checkResult == CommonUtils::FAIL){
  42.                                                                 Logger::log(Logger::INFORMATIONAL, "\n Found error with recored file: $recordFile \n");
  43.                                                         }
  44.                                                 }
  45.                                         }
  46.                                 }
  47.                         }
  48.                 }
  49.         }
  50.         print ("checkResult:$checkResult\n\n");
  51.         return $checkResult;
复制代码

论坛徽章:
0
发表于 2017-05-21 09:54 |显示全部楼层
下面是完整的函数,目的是取出testCommand 中包含的recordFile,然后再判断是否满足条件,满足条件的播放,不需要播放的直接过。条件基本就是几个数组。
代码不知道为啥贴不上来,转到附件里去了

check.zip

880 Bytes, 下载次数: 0

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
发表于 2017-05-21 18:56 |显示全部楼层
把foreach后面的抽成一个个的子程序,那样看起来比较直观。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP