Mercurial > mplayer.hg
annotate libmpcodecs/ve.c @ 35829:66bbe17c4abc
demux_lavf: fix up all ffmpeg:// URLs.
Fixes playback of hls streams via FFmpeg.
author | reimar |
---|---|
date | Sat, 23 Feb 2013 23:54:24 +0000 |
parents | af9ef007bec6 |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
27363
diff
changeset
|
18 |
5550 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 | |
17012 | 23 #include "config.h" |
24 #include "mp_msg.h" | |
5550 | 25 |
5607 | 26 #include "img_format.h" |
27 #include "mp_image.h" | |
5550 | 28 #include "vf.h" |
32476 | 29 #include "ve.h" |
5550 | 30 |
32033 | 31 extern const vf_info_t ve_info_lavc; |
32 extern const vf_info_t ve_info_vfw; | |
33 extern const vf_info_t ve_info_raw; | |
34 extern const vf_info_t ve_info_libdv; | |
35 extern const vf_info_t ve_info_xvid; | |
36 extern const vf_info_t ve_info_qtvideo; | |
37 extern const vf_info_t ve_info_nuv; | |
38 extern const vf_info_t ve_info_x264; | |
5550 | 39 |
25876
edfe8baed49f
copy note on new demuxers and codecs to the top of the array as well to be
ivo
parents:
25872
diff
changeset
|
40 /* Please do not add any new encoders here. If you want to implement a new |
25880
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
41 * encoder, add it to libavcodec, except for wrappers around external |
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
42 * libraries and encoders requiring binary support. */ |
25876
edfe8baed49f
copy note on new demuxers and codecs to the top of the array as well to be
ivo
parents:
25872
diff
changeset
|
43 |
32035
bc01ea7a6322
Mark encoder_list declaration as const pointers to const data, fixes:
diego
parents:
32033
diff
changeset
|
44 static const vf_info_t * const encoder_list[] = { |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
32035
diff
changeset
|
45 #ifdef CONFIG_FFMPEG |
5550 | 46 &ve_info_lavc, |
47 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26513
diff
changeset
|
48 #ifdef CONFIG_WIN32DLL |
5550 | 49 &ve_info_vfw, |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26513
diff
changeset
|
50 #ifdef CONFIG_QTX_CODECS_WIN32 |
8471 | 51 &ve_info_qtvideo, |
5550 | 52 #endif |
15453
d7a2ffc6e694
compilation/link fix with --disable-qtx --disable-dshow
diego
parents:
13166
diff
changeset
|
53 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
54 #ifdef CONFIG_LIBDV095 |
5577 | 55 &ve_info_libdv, |
56 #endif | |
11966 | 57 &ve_info_raw, |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
58 #ifdef CONFIG_XVID4 |
7456 | 59 &ve_info_xvid, |
60 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26513
diff
changeset
|
61 #ifdef CONFIG_LIBLZO |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
8471
diff
changeset
|
62 &ve_info_nuv, |
22244
675574bebb04
Make liblzo conditional to the appropriate #defines.
diego
parents:
20984
diff
changeset
|
63 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
64 #ifdef CONFIG_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:
11966
diff
changeset
|
65 &ve_info_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:
11966
diff
changeset
|
66 #endif |
25872
3eeaf9d4c65a
note on new demuxers and codecs, add them to lav* instead of libmp*
ivo
parents:
22244
diff
changeset
|
67 /* Please do not add any new encoders here. If you want to implement a new |
25880
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
68 * encoder, add it to libavcodec, except for wrappers around external |
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
69 * libraries and encoders requiring binary support. */ |
5550 | 70 NULL |
71 }; | |
72 | |
18980
ed69754aa58d
Marks several string parameters as const when they are not modified in the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
17012
diff
changeset
|
73 vf_instance_t* vf_open_encoder(vf_instance_t* next, const char *name, char *args){ |
9595 | 74 char* vf_args[] = { "_oldargs_", args, NULL }; |
75 return vf_open_plugin(encoder_list,next,name,vf_args); | |
5550 | 76 } |
32476 | 77 |
78 static double *forced_key_frames_ts; | |
79 static int forced_key_frames_number; | |
80 static int forced_key_frames_idx; | |
81 | |
82 int parse_forced_key_frames(const m_option_t *opt, const char *arg) | |
83 { | |
84 double ts; | |
85 const char *p; | |
86 int nts = 1, idx = 0, len; | |
87 | |
88 for (p = arg; *p; p++) | |
89 nts += *p == ','; | |
90 free(forced_key_frames_ts); | |
91 forced_key_frames_ts = calloc(sizeof(*forced_key_frames_ts), nts); | |
92 p = arg; | |
93 while (1) { | |
94 len = parse_timestring(p, &ts, ','); | |
95 if (!len) { | |
96 mp_msg(MSGT_CFGPARSER, MSGL_ERR, | |
97 "Option force-key-frames: invalid time: '%s'\n", p); | |
98 return M_OPT_INVALID; | |
99 } | |
100 forced_key_frames_ts[idx++] = ts; | |
101 if (!p[len]) | |
102 break; | |
103 p += len + 1; | |
104 } | |
105 forced_key_frames_number = idx; | |
106 forced_key_frames_idx = 0; | |
107 for (idx = 1; idx < forced_key_frames_number; idx++) { | |
108 if (forced_key_frames_ts[idx - 1] >= forced_key_frames_ts[idx]) { | |
109 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option force-key-frames: " | |
110 "timestamps are not in ascending order\n"); | |
111 return M_OPT_INVALID; | |
112 } | |
113 } | |
114 return 0; | |
115 } | |
116 | |
117 int is_forced_key_frame(double pts) | |
118 { | |
119 if (forced_key_frames_idx < forced_key_frames_number && | |
120 pts >= forced_key_frames_ts[forced_key_frames_idx]) { | |
121 forced_key_frames_idx++; | |
122 if (forced_key_frames_idx >= forced_key_frames_number) { | |
123 free(forced_key_frames_ts); | |
124 forced_key_frames_number = 0; | |
125 } | |
126 return 1; | |
127 } | |
128 return 0; | |
129 } |