View difference between Paste ID: 2KEtxuak and
SHOW: | | - or go back to the newest paste.
1-
1+
void RenderEnginePixo::video_init_params(x264_param_t* params) {
2
    ZeroMemory(&x264_params, sizeof(x264_params));
3
    if(x264_param_default_preset(params, "veryfast", "zerolatency")) {
4
        x264Error::throw_("x264_param_default_preset() failed");
5
    }
6
    const char* parms[] = {
7
        "vbv-maxrate", "500",
8
        "vbv-bufsize", "1666",
9
        "intra-refresh", NULL,
10
        //"fps", "30",
11
        "slice-max-size", "1500",
12
        "bitrate", "500",
13
        0,0
14
    };
15
    const char** p = parms;
16
    while(p[0]) {
17
        if(x264_param_parse(params, p[0], p[1])) {
18
            x264Error::throw_("x264_param_parse(\"%s\", \"%s\") failed", p[0], p[1]);
19
        }
20
        p += 2;
21
    }
22
}
23
24
...
25
26
    if(!x264_encoder) {
27
        first_frame = true;
28
        video_init_params(&x264_params);
29
        x264_params.i_width = (buffer->BufferWidth+1)&~1;
30
        x264_params.i_height = (buffer->BufferHeight+1)&~1;
31
        x264_params.i_timebase_num = 1000;
32
        x264_params.i_timebase_den = 15000;
33
34
...
35
36
    if(first_frame) {
37
        video_encode_starttime = systemTimeProvider.getCurrentTime();
38
        x264_picture.i_pts = 0;
39
    } else {
40
        //unsigned long millis = systemTimeProvider.getCurrentTime() - video_encode_starttime;
41
        //x264_picture.i_pts += millis;
42
        //x264_picture.i_pts += 10;
43
        x264_picture.i_pts += 1;
44
    }
45
    x264_picture.i_type = X264_TYPE_AUTO;
46
    x264_picture.i_qpplus1 = 0;
47
48
    x264_nal_t* nals;
49
    int num_nals;
50
    x264_picture_t pic_out;
51
    int n = x264_encoder_encode(x264_encoder, &nals, &num_nals, &x264_picture, &pic_out);
52
    //LOG("encoded: %d %d", n, num_nals);
53
    if(n<0) {
54
        x264Error::throw_("x264_encoder_encode() failed");
55
    }
56
    write_nals(nals, num_nals, x264_file);