小编hom*_*omm的帖子

使用getUserMedia获得最大的视频分辨率

我想通过JS尽可能获得最高的视频分辨率navigator.getUserMedia.我知道约束,但在我的情况下不知道如何正确选择.

问题似乎是没有办法说"我想要一个最大分辨率的视频".所以相反,我试图说"我希望视频不低于非常大的分辨率".

当我尝试时minWidth: 1600,Chrome会返回1280×720视频(我认为我的相机可能最高).但是,如果用户拥有更高分辨率的相机呢?所以我要求minWidth: 2048视频,Chrome只返回640×480.

var constraints = {
  video: {
    optional: [
    {minWidth: 2048}
    ]
  }
};
Run Code Online (Sandbox Code Playgroud)

这是在线示例:http://jsbin.com/kibeza/1/watch?js,output

并且存在实际问题:Chrome不懂数学.它认为1600大于2048.我不能要求视频"不低于100500",因为在这种情况下我将得到标准的低分辨率.我不能问视频"不低于一些合理的小分辨率",因为可能有更高分辨率的用户,我想获得更高的分辨率.

javascript video html5 webrtc

30
推荐指数
5
解决办法
2万
查看次数

为什么进程的内存分配速度慢而且速度更快?

我比较熟悉虚拟内存的工作原理.所有进程内存分为页面,虚拟内存的每个页面映射到实际内存中的页面或交换文件中的页面,或者它可以是新页面,这意味着仍未分配物理页面.操作系统会根据需要将新页面映射到实际内存,而不是在应用程序请求内存时malloc,而是仅在应用程序实际访问分配的内存中的每个页面时.但我还有疑问.

当我用linux perf工具分析我的应用程序时,我注意到了这一点.

在此输入图像描述

有时间的20%左右了内核函数:clear_page_orig,__do_page_faultget_page_from_free_list.这比我预期的任务要多得多,我做了一些研究.

让我们从一些小例子开始:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define SIZE 1 * 1024 * 1024

int main(int argc, char *argv[]) {
  int i;
  int sum = 0;
  int *p = (int *) malloc(SIZE);
  for (i = 0; i < 10000; i ++) {
    memset(p, 0, SIZE);
    sum += p[512];
  }
  free(p);
  printf("sum %d\n", sum);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

假设这memset只是一些内存绑定处理.在这种情况下,我们一次分配一小块内存并一次又一次地重复使用.我会像这样运行这个程序:

$ gcc -O1 ./mem.c && time ./a.out
Run Code Online (Sandbox Code Playgroud)

-O1 …

c operating-system memory-management linux-kernel

27
推荐指数
2
解决办法
4581
查看次数

GCC生成的64位代码比32位慢3倍

我注意到我的代码在64位Linux上运行比在32位Linux或64位Window或64位Mac上慢得多.这是最小的测试用例.

#include <stdlib.h>

typedef unsigned char UINT8;

void
stretch(UINT8 * lineOut, UINT8 * lineIn, int xsize, float *kk)
{
    int xx, x;

    for (xx = 0; xx < xsize; xx++) {
        float ss = 0.0;
        for (x = 0; x < xsize; x++) {
            ss += lineIn[x] * kk[x];
        }
        lineOut[xx] = (UINT8) ss;
    }
}

int
main( int argc, char** argv )
{
    int i;
    int xsize = 2048;

    UINT8 *lineIn = calloc(xsize, sizeof(UINT8));
    UINT8 *lineOut = calloc(xsize, sizeof(UINT8)); …
Run Code Online (Sandbox Code Playgroud)

c performance 64-bit gcc

8
推荐指数
1
解决办法
1011
查看次数