Mercurial > mplayer.hg
annotate libmpcodecs/ve_x264.c @ 33500:c36fec5ba5b6
Always choose AV_SAMPLE_FMT_S16 then the encoder supports it.
author | reimar |
---|---|
date | Sat, 11 Jun 2011 23:36:52 +0000 |
parents | 7d13ed4e80f2 |
children | 389d43c448b3 |
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 | 33 #include "config.h" |
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" |
33251
7d13ed4e80f2
Add missing osdep/strsep.h #include where strsep() is used.
diego
parents:
32527
diff
changeset
|
41 #include "osdep/strsep.h" |
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 | 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 | 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(¶m); |
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(©, ":"))) { |
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(¶m, 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(¶m, 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 | 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(¶m); |
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(¶m, 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 | 144 |
145 if(parse_error) | |
146 return 0; | |
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 | 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(¶m, "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(¶m); |
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 | 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 | 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 | 189 mod->mux->bih= realloc(mod->mux->bih, sizeof(*mod->mux->bih) + extradata_size); |
29662 | 190 memcpy(mod->mux->bih + 1, nal->p_payload, extradata_size); |
32123 | 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 | 194 if (param.i_bframe > 1 && param.i_bframe_pyramid) |
17659 | 195 mod->mux->decoder_delay = 2; |
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 | 227 /* These colorspaces are supported, but they'll just have |
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 | 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 | 248 if (is_forced_key_frame(pts)) |
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 | 260 int i_size; |
14784
53d306774ce2
sync to x264 r137: adaptive B-frame decision, flush delayed frames.
lorenm
parents:
14759
diff
changeset
|
261 |
29662 | 262 i_size = x264_encoder_encode(mod->x264, &nal, &i_nal, pic_in, &pic_out); |
263 | |
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 | 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 | 273 else |
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 | 287 h264_module_t *mod; |
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 | 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 | 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 | 299 mod->mux->bih = calloc(1, sizeof(*mod->mux->bih)); |
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 | 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 }; |