annotate libmpcodecs/ve_x264.c @ 32972:fbaae7fe1a13

Fix several issues with Translate(). 1. The "Unsafe!" comment has been removed, because the strings passed to the function are strcpy'd. 2. The needless memsets (one of which with wrong size) have been removed in favor of a sufficiently simple initialization of trbuf. 3. The array indices are unsigned now, and the manual optimization of having strlen() outside the for loop has been removed in favor of optimization performed by the compiler. 4. There is a check now to prevent an out-of-bounds array access.
author ib
date Tue, 08 Mar 2011 20:56:51 +0000
parents babddccb9312
children 7d13ed4e80f2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
1 /*****************************************************************************
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
2 *
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
3 * - H.264 encoder for mencoder using x264 -
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
4 *
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
5 * Copyright (C) 2004 LINUX4MEDIA GmbH
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
6 * Copyright (C) 2004 Ark Linux
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
7 *
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
8 * Written by Bernhard Rosenkraenzer <bero@arklinux.org>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
9 *
26647
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
10 * This file is part of MPlayer.
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
11 *
26647
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
12 * MPlayer is free software; you can redistribute it and/or modify
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
13 * it under the terms of the GNU General Public License as published by
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
15 * (at your option) any later version.
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
16 *
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
17 * MPlayer is distributed in the hope that it will be useful,
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26647
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
20 * GNU General Public License for more details.
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
21 *
26647
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
22 * You should have received a copy of the GNU General Public License along
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
23 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bd0554dbc8e5 Relicense file as GPL v2+; bero granted permission on IRC.
diego
parents: 25607
diff changeset
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
25 *
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
26 *****************************************************************************/
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
27
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
28 #include <stdio.h>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
29 #include <stdlib.h>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
30 #include <string.h>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
31 #include <errno.h>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
32
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16898
diff changeset
33 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16898
diff changeset
34 #include "mp_msg.h"
32064
a735105a66b6 Move all MEncoder-related extern variable declarations to mencoder.h.
diego
parents: 32033
diff changeset
35 #include "mencoder.h"
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
36 #include "m_option.h"
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
37 #include "codec-cfg.h"
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 22158
diff changeset
38 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
39 #include "libmpdemux/demuxer.h"
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
40 #include "libmpdemux/stheader.h"
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
41
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 22158
diff changeset
42 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
43 #include "libmpdemux/muxer.h"
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
44
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
45 #include "img_format.h"
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
46 #include "mp_image.h"
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
47 #include "vf.h"
32478
87870a8a114a Support for -force-key-frames for ve_x264.
cigaes
parents: 32123
diff changeset
48 #include "ve.h"
30949
e4c7703dd901 Add a header for x264enc_set_param() instead of forward declaring it.
diego
parents: 30748
diff changeset
49 #include "ve_x264.h"
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
50
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
51 #include <x264.h>
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
52
25607
9d0b189ce1b2 Fix illegal identifiers: Names starting with __ or _ and uppercase are reserved
diego
parents: 25570
diff changeset
53 typedef struct h264_module_t {
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
54 muxer_stream_t *mux;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
55 x264_t * x264;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
56 x264_picture_t pic;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
57 } h264_module_t;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
58
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
59 static x264_param_t param;
20317
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
60 static int parse_error = 0;
16366
e054a3c93a26 custom quantization matrix for x264, original patch by Robert Swain < robert POUM swain AH gmail POUM com>
gpoirier
parents: 16016
diff changeset
61
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
62 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts);
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
63 static int encode_frame(struct vf_instance *vf, x264_picture_t *pic_in);
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
64
25232
893db6cc97b2 Add appropriate const specifiers to some custom parse functions.
reimar
parents: 22601
diff changeset
65 void x264enc_set_param(const m_option_t* opt, char* arg)
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
66 {
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
67 static int initialized = 0;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
68 int slow_firstpass = 0;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
69 char *preset = NULL, *tune = NULL, *profile = NULL;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
70 char *p, *copy, *name;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
71
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
72 if (!initialized) {
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
73 x264_param_default(&param);
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
74 initialized = 1;
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
75 }
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
76 if (!arg) {
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
77 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option x264encopts: no options provided\n");
22032
62d7b935df2e fix a segfault if -x264encopts is the last commandline option (with no argument)
lorenm
parents: 21660
diff changeset
78 parse_error = 1;
62d7b935df2e fix a segfault if -x264encopts is the last commandline option (with no argument)
lorenm
parents: 21660
diff changeset
79 return;
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
80 } else if (!*arg)
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
81 /* Empty arguments, just doing initialization of default parameters. */
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
82 return;
20054
8760c8681eac Remove the x264 option parser, and pass the options on to libx264 as a string instead. This provides automatic support for all current and future x264 options.
lorenm
parents: 19623
diff changeset
83
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
84 /* Step 1: look for initial preset/tune. */
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
85 copy = p = strdup(arg);
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
86 while ((name = strsep(&copy, ":"))) {
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
87 char *value = strpbrk(name, "=:");
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
88 if (!value)
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
89 continue;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
90 *value++ = 0;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
91 if (!strcasecmp(name, "preset"))
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
92 preset = value;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
93 else if (!strcasecmp(name, "tune"))
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
94 tune = value;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
95 }
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
96 if (x264_param_default_preset(&param, preset, tune) < 0) {
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
97 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option x264encopts: Invalid preset or tune.\n");
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
98 parse_error = 1;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
99 }
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
100 free(p);
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
101
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
102 /* Step 2: explicit user overrides */
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
103 while ((name = strsep(&arg, ":")) && *name) {
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
104 int ret = 0;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
105 char *value = strpbrk(name, "=:");
20054
8760c8681eac Remove the x264 option parser, and pass the options on to libx264 as a string instead. This provides automatic support for all current and future x264 options.
lorenm
parents: 19623
diff changeset
106
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
107 if (value)
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
108 *value++ = 0;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
109 if (!strcasecmp(name, "profile"))
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
110 profile = value;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
111 else if (!strcasecmp(name, "turbo")) {
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
112 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option x264encopts: turbo option is deprecated; "
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
113 "use slow_firstpass to disable turbo\n");
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
114 if (value && *value == '0')
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
115 slow_firstpass = 1;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
116 } else if (!strcasecmp(name, "slow_firstpass"))
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
117 slow_firstpass = 1;
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
118 else if (strcasecmp(name, "preset") && strcasecmp(name, "tune")) {
31299
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
119 ret = x264_param_parse(&param, name, value);
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
120 if (ret == X264_PARAM_BAD_NAME)
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
121 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option x264encopts: Unknown suboption %s\n", name);
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
122 if (ret == X264_PARAM_BAD_VALUE)
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
123 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option x264encopts: Bad argument %s=%s\n",
34507085a841 Cosmetics: properly indent block after introducing if statement in r31363.
tack
parents: 31297
diff changeset
124 name, value ? value : "(null)");
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
125
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
126 }
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
127 /* mark this option as done, so it's not reparsed if there's another -x264encopts */
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
128 *name = 0;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
129
20317
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
130 parse_error |= ret;
16366
e054a3c93a26 custom quantization matrix for x264, original patch by Robert Swain < robert POUM swain AH gmail POUM com>
gpoirier
parents: 16016
diff changeset
131 }
e054a3c93a26 custom quantization matrix for x264, original patch by Robert Swain < robert POUM swain AH gmail POUM com>
gpoirier
parents: 16016
diff changeset
132
31297
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
133 /* Step 3: Apply fast first pass (turbo) options. */
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
134 if (!slow_firstpass)
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
135 x264_param_apply_fastfirstpass(&param);
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
136
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
137 /* Step 4: enforce profile */
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
138 if (profile && x264_param_apply_profile(&param, profile) < 0)
97c3077b4e67 ve_x264: rewrite option parsing and add support for x264's presets,
tack
parents: 31007
diff changeset
139 parse_error = 1;
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
140 }
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
141
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
142 static int config(struct vf_instance *vf, int width, int height, int d_width, int d_height, unsigned int flags, unsigned int outfmt) {
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
143 h264_module_t *mod=(h264_module_t*)vf->priv;
20317
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
144
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
145 if(parse_error)
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
146 return 0;
50584bb892c0 make any parse error in -x264encopts fatal
lorenm
parents: 20297
diff changeset
147
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
148 mod->mux->bih->biWidth = width;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
149 mod->mux->bih->biHeight = height;
25570
b7ab557b7b30 remove code for colorspaces x264 doesn't support
lorenm
parents: 25232
diff changeset
150 mod->mux->bih->biSizeImage = width * height * 3;
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
151 mod->mux->aspect = (float)d_width/d_height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26754
diff changeset
152
20333
7f84082900a3 Add a call to x264enc_set_param in config, otherwise mencoder -ovc x264
reimar
parents: 20317
diff changeset
153 // make sure param is initialized
7f84082900a3 Add a call to x264enc_set_param in config, otherwise mencoder -ovc x264
reimar
parents: 20317
diff changeset
154 x264enc_set_param(NULL, "");
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
155 param.i_width = width;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
156 param.i_height = height;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
157 param.i_fps_num = mod->mux->h.dwRate;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
158 param.i_fps_den = mod->mux->h.dwScale;
31007
26537f75c1dd Tell x264 that we aren't going to give it timestamps.
lorenm
parents: 30949
diff changeset
159 param.b_vfr_input = 0;
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
160 param.vui.i_sar_width = d_width*height;
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
161 param.vui.i_sar_height = d_height*width;
15964
d244178a3105 x264 fast first pass, patch by Robert Swain < robert POUM swain AH gmail POUM com >
gpoirier
parents: 15744
diff changeset
162
20297
b69c85b29cb5 make -passlogfile work with x264 again (broke in r20060)
lorenm
parents: 20252
diff changeset
163 x264_param_parse(&param, "stats", passtmpfile);
b69c85b29cb5 make -passlogfile work with x264 again (broke in r20060)
lorenm
parents: 20252
diff changeset
164
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
165 switch(outfmt) {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
166 case IMGFMT_I420:
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
167 param.i_csp = X264_CSP_I420;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
168 break;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
169 case IMGFMT_YV12:
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
170 param.i_csp = X264_CSP_YV12;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
171 break;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
172 default:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
173 mp_msg(MSGT_MENCODER, MSGL_ERR, "Wrong colorspace.\n");
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
174 return 0;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
175 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26754
diff changeset
176
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
177 mod->x264 = x264_encoder_open(&param);
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
178 if(!mod->x264) {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
179 mp_msg(MSGT_MENCODER, MSGL_ERR, "x264_encoder_open failed.\n");
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
180 return 0;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
181 }
19577
7e19b1207b81 "global header" support, this is pretty much just copy and pasted code from
michael
parents: 19125
diff changeset
182
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
183 if(!param.b_repeat_headers){
19577
7e19b1207b81 "global header" support, this is pretty much just copy and pasted code from
michael
parents: 19125
diff changeset
184 x264_nal_t *nal;
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
185 int extradata_size, nnal;
19577
7e19b1207b81 "global header" support, this is pretty much just copy and pasted code from
michael
parents: 19125
diff changeset
186
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
187 extradata_size = x264_encoder_headers(mod->x264, &nal, &nnal);
19577
7e19b1207b81 "global header" support, this is pretty much just copy and pasted code from
michael
parents: 19125
diff changeset
188
32123
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 32122
diff changeset
189 mod->mux->bih= realloc(mod->mux->bih, sizeof(*mod->mux->bih) + extradata_size);
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
190 memcpy(mod->mux->bih + 1, nal->p_payload, extradata_size);
32123
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 32122
diff changeset
191 mod->mux->bih->biSize= sizeof(*mod->mux->bih) + extradata_size;
19577
7e19b1207b81 "global header" support, this is pretty much just copy and pasted code from
michael
parents: 19125
diff changeset
192 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26754
diff changeset
193
29745
58e73accaeb7 sync to x264-r1296
lorenm
parents: 29663
diff changeset
194 if (param.i_bframe > 1 && param.i_bframe_pyramid)
17659
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
195 mod->mux->decoder_delay = 2;
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
196 else
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
197 mod->mux->decoder_delay = param.i_bframe ? 1 : 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26754
diff changeset
198
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
199 return 1;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
200 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
201
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
202 static int control(struct vf_instance *vf, int request, void *data)
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
203 {
20054
8760c8681eac Remove the x264 option parser, and pass the options on to libx264 as a string instead. This provides automatic support for all current and future x264 options.
lorenm
parents: 19623
diff changeset
204 h264_module_t *mod=(h264_module_t*)vf->priv;
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
205 switch(request){
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
206 case VFCTRL_FLUSH_FRAMES:
29663
18b540567d56 Use x264_encoder_delayed_frames instead of the current hack to flush delayed
reimar
parents: 29662
diff changeset
207 while (x264_encoder_delayed_frames(mod->x264) > 0)
18b540567d56 Use x264_encoder_delayed_frames instead of the current hack to flush delayed
reimar
parents: 29662
diff changeset
208 encode_frame(vf, NULL);
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
209 return CONTROL_TRUE;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
210 default:
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
211 return CONTROL_UNKNOWN;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
212 }
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
213 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
214
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
215 static int query_format(struct vf_instance *vf, unsigned int fmt)
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
216 {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
217 switch(fmt) {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
218 case IMGFMT_I420:
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 26647
diff changeset
219 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
220 case IMGFMT_YV12:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
221 case IMGFMT_422P:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
222 case IMGFMT_444P:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
223 case IMGFMT_YVYU:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
224 case IMGFMT_RGB:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
225 case IMGFMT_BGR:
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
226 case IMGFMT_BGR32:
14943
4f43e3452b36 sync to x264 171: chroma_me, chroma_qp_offset
lorenm
parents: 14916
diff changeset
227 /* These colorspaces are supported, but they'll just have
4f43e3452b36 sync to x264 171: chroma_me, chroma_qp_offset
lorenm
parents: 14916
diff changeset
228 * to be converted to I420 internally */
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
229 return 0; /* VFCAP_CSP_SUPPORTED */
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
230 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
231 return 0;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
232 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
233
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
234 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
235 {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
236 h264_module_t *mod=(h264_module_t*)vf->priv;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
237 int i;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26754
diff changeset
238
32527
babddccb9312 use x264_picture_init.
lorenm
parents: 32478
diff changeset
239 x264_picture_init(&mod->pic);
20252
eaaf13b39595 fix multiple instances of -x264encopts on the commandline (broke in r20060)
lorenm
parents: 20054
diff changeset
240 mod->pic.img.i_csp=param.i_csp;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
241 mod->pic.img.i_plane=3;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
242 for(i=0; i<4; i++) {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
243 mod->pic.img.plane[i] = mpi->planes[i];
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
244 mod->pic.img.i_stride[i] = mpi->stride[i];
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
245 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
246
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
247 mod->pic.i_type = X264_TYPE_AUTO;
32478
87870a8a114a Support for -force-key-frames for ve_x264.
cigaes
parents: 32123
diff changeset
248 if (is_forced_key_frame(pts))
87870a8a114a Support for -force-key-frames for ve_x264.
cigaes
parents: 32123
diff changeset
249 mod->pic.i_type = X264_TYPE_KEYFRAME;
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
250
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
251 return encode_frame(vf, &mod->pic) >= 0;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
252 }
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
253
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
254 static int encode_frame(struct vf_instance *vf, x264_picture_t *pic_in)
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
255 {
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
256 h264_module_t *mod=(h264_module_t*)vf->priv;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
257 x264_picture_t pic_out;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
258 x264_nal_t *nal;
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
259 int i_nal;
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
260 int i_size;
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
261
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
262 i_size = x264_encoder_encode(mod->x264, &nal, &i_nal, pic_in, &pic_out);
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
263
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
264 if(i_size<0) {
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
265 mp_msg(MSGT_MENCODER, MSGL_ERR, "x264_encoder_encode failed\n");
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
266 return -1;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
267 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
268 if(i_size>0) {
30748
923f55aafcf6 Reuse the keyframe flag from x264 instead of trying to derive it on our own.
reimar
parents: 30747
diff changeset
269 int keyframe = pic_out.b_keyframe;
29662
fb0202969d92 sync to x264-r1260 (which changed api)
lorenm
parents: 29438
diff changeset
270 memcpy(mod->mux->buffer, nal->p_payload, i_size);
30747
7ac542b9ca24 Use the KEYFRAME define instead of some magic number.
reimar
parents: 30642
diff changeset
271 muxer_write_chunk(mod->mux, i_size, keyframe?AVIIF_KEYFRAME:0, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
272 }
17659
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
273 else
92ac78a93625 Fix video delay when encoding with B-frames.
corey
parents: 17523
diff changeset
274 ++mod->mux->encoder_delay;
14784
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
275
53d306774ce2 sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents: 14759
diff changeset
276 return i_size;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
277 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
278
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 29745
diff changeset
279 static void uninit(struct vf_instance *vf)
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
280 {
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
281 h264_module_t *mod=(h264_module_t*)vf->priv;
22158
a6a93224cf4d Avoid crash when uninit is called without ever calling config in x264 encoder
reimar
parents: 22032
diff changeset
282 if (mod->x264)
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
283 x264_encoder_close(mod->x264);
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
284 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
285
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
286 static int vf_open(vf_instance_t *vf, char *args) {
13334
04f7b5e75785 fix compile on gcc 2.95.3
iive
parents: 13325
diff changeset
287 h264_module_t *mod;
04f7b5e75785 fix compile on gcc 2.95.3
iive
parents: 13325
diff changeset
288
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
289 vf->config = config;
14878
5723c4b2a2ea fixes for encoding of multiple files
henry
parents: 14846
diff changeset
290 vf->default_caps = VFCAP_CONSTANT;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
291 vf->control = control;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
292 vf->query_format = query_format;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
293 vf->put_image = put_image;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
294 vf->uninit = uninit;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
295 vf->priv = malloc(sizeof(h264_module_t));
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
296
13334
04f7b5e75785 fix compile on gcc 2.95.3
iive
parents: 13325
diff changeset
297 mod=(h264_module_t*)vf->priv;
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
298 mod->mux = (muxer_stream_t*)args;
32123
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 32122
diff changeset
299 mod->mux->bih = calloc(1, sizeof(*mod->mux->bih));
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 32122
diff changeset
300 mod->mux->bih->biSize = sizeof(*mod->mux->bih);
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
301 mod->mux->bih->biPlanes = 1;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
302 mod->mux->bih->biBitCount = 24;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
303 mod->mux->bih->biCompression = mmioFOURCC('h', '2', '6', '4');
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
304
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
305 return 1;
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
306 }
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
307
32033
c42345605c7a Mark video encoder vf_info_t structs as const.
diego
parents: 31299
diff changeset
308 const vf_info_t ve_info_x264 = {
13166
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
309 "H.264 encoder",
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
310 "x264",
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
311 "Bernhard Rosenkraenzer <bero@arklinux.org>",
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
312 "(C) 2004 LINUX4MEDIA GmbH; (C) 2004 Ark Linux",
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
313 vf_open
d198f255bee9 x264 encoder support. Original patch send by Bernhard Rosenkraenzer <bero at arklinux dot org>, modifications by Loren Merritt <lorenm at u.washington dot edu>, Jeff Clagg <snacky at ikaruga.co dot uk> and me
iive
parents:
diff changeset
314 };