summaryrefslogtreecommitdiffstats
path: root/core/mplayer.c
Commit message (Collapse)AuthorAgeFilesLines
* core: make WAKEUP_PERIOD overridable by the voRudolf Polzer2012-12-191-12/+26
| | | | | | | | | | | | This is better than having just the operating system type decide the wakeup period, as e.g. when compiling for Win32/cygwin, a wakeup period of 0.5 would work perfectly fine. Instead, the default wakeup period is now only decided by availability of a working select() system call (which is the case on cygwin but not mingw and MSVC) AND a vo that can provide an event file descriptor or a similar hack (vo_corevideo). vos that cannot do either need polling for event handling and now can set the wakeup period to 0.02 in the vo code.
* path: add mp_find_config_file and reorganize some of the codeStefano Pigozzi2012-12-151-7/+8
| | | | | | | | | | | | | | Add `mp_find_config_file` to search different known paths and use that in ass_mp to look for the fontconfig configuration file. Some incidental changes spawned by this feature where: * Buffer allocation for the strings containing the paths is now performed with talloc. All of the allocations are done on a NULL context, but it still improves readability of the code. * Move the OSX function for lookup inside of a bundle: this code path was currently not used by the bundle generated with `make osxbundle`. The plan is to use it again in a future commit to get a fontconfig config file.
* cleanup: remove ao.brokenptswm42012-12-121-7/+0
| | | | This field was used by ao_v4l2, and is now unused.
* sd_lavc: keep subs on subtitle track switchingwm42012-12-121-1/+1
| | | | | | | | | | | | | Keep the currently displayed subtitles even when the user cycles through subtitle tracks, and the subtitle is decoded by libavcodec (such as vobsubs). Do this by not clearing the subtitles on reset(). reset() is also called on seek, so check the start PTS whether the subtitle should really be displayed (there's already an end PTS). Note that sd_ass does essentially something similar. The existing code has checks for whether the PTS reported by the demuxer is invalid (MP_NOPTS_VALUE). I don't know under what circumstances this can happens, so fall back to the old behavior if the PTS is invalid.
* mplayer: prefer audio PTS over video PTS for status linewm42012-12-111-3/+3
| | | | | | | | | | | | This slightly improves display of the current playback time in files with sparse video packets (like video tracks containing a slow MJPG slideshows as in [1]), or audio files with cover art image attachments. While the video PTS is always "stuck" at the last frame displayed or the last seek, audio is usually continuous. Given sane samplerates and working audio drivers (to query how much of the current audio buffer has been played), the audio PTS should always be more reliable. [1] http://www.podtrac.com/pts/redirect.mp3/traffic.libsyn.com/rtpodcast/Rooster_Teeth_Podcast_191.m4a
* core: allow disabling display of "album art" in audio fileswm42012-12-111-5/+12
| | | | | | | | | | | | | | | | | | ffmpeg pretends that image attachments (such as contained in ID3v2 metadata) are video streams. It injects the attached pictures as packets into the packet stream received with av_read_frame(). Add the --audio-display option to allow configuring whether attached pictures should be displayed. The default behavior doesn't change (images are displayed). Identify video streams, that are actually image attachments, with "[P]" in the terminal output. Modify the default stream selection such that real video streams are preferred over attached pictures. (This is just for robustness; I do not know of any samples where images are added before actual video streams and could lead to bad default stream selection with the old code.)
* windows support: fix compilation with pthreadswm42012-12-111-0/+4
| | | | | | | | | | | | | | | This caused errors like: core/mplayer.c:4308:5: error: implicit declaration of function 'pthread_win32_thread_detach_np' [-Werror=implicit-function-declaration] It turns out a pthread.h include was missing. It's not clear why this used to work (or rather, why it happens only sometimes). Possibly some libraries or system headers recursively include pthread.h under certain circumstances or configurations. Fix missing quoting in configure, which led to broken terminal output. Closes #6.
* mplayer: make --length work if --start is missingwm42012-12-111-1/+1
| | | | In this case, --start should default to 0 obviously.
* sub: remove vobsub reader in favor of ffmpeg vobsub demuxerwm42012-12-111-97/+28
| | | | | | | | ffmpeg recently added a demuxer that can read vobsubs (pairs of .sub and .idx files). Get rid of the internal vobsub reader, and use the ffmpeg demuxer instead. Sneak in an unrelated manpage change (autosub default).
* core: improve seeking in external fileswm42012-12-111-11/+27
| | | | | | | | | | | | | | | | | | | | | | | | This affects streams loaded with -subfile and -audiofile. They could get out of sync when they were deselected, and the main file was seeked. Add code to seek external files when they are selected (see init_demux_stream()). Use avformat_seek_file() under certain circumstances. Both av_seek_frame() ("old" API) and avformat_seek_file() ("new" API) seem to be broken with some formats. At least the vobsub demuxer doesn't implement the old API (and the old API doesn't fallback to the new API), while the fallback from new API to old API gives bad results. For example, seeking forward with small step sizes seems to fail with the new API (tested with Matroska by trying to seek 1 second forward relative to priv->last_pts). Since only subtitle demuxers implement the new API anyway, checking whether iformat->read_seek2 is set to test whether the old API is not supported gives best results. This is a hack at best, but makes things work. Remove backwards seeking on seek failure. This was annoying, and only was there to compensate for obscure corner cases (see 1ad332). In particular, files with completely broken seeking that used to skip back to the start on every seek request may now terminate playback.
* sub: use ffmpeg decoder for DVD subswm42012-12-101-1/+47
| | | | | | | | | | | | | | | | | Do this only if demux_lavf is used. Using demux_mpg and the ffmpeg DVD subtitle decoder doesn't work. The problem is probably that demux_mpg doesn't join split sub packets, while demux_lavf does. The internal DVD sub decoder (spudec.c) can, while ffmpeg's dvdsub can't. I do not know whether this is the actual problem. If DVD playback is used, create "fake" vobsub-style text extradata (like .idx files) to pass resolution and palette information to the ffmpeg decoder. We could use the "palette" AVOpt and avcodec_set_dimensions() instead, but it's actually simpler this way. Note that the decoder doesn't parse any other fields. Also note that DVD playback still uses demux_mpg by default, so this code is inactive unless -demuxer lavf is specified. This is mainly preparation for the case when we manage to get rid of demux_mpg for DVD playback.
* core: automatically pause on low cachewm42012-12-031-3/+41
| | | | | | | | | | | | | | | When the cache fill status goes below a certain threshold, automatically pause the player. When the cache is filled again, unpause again. This is intended to help with streaming from http. It's better to pause a while, rather than exposing extremely crappy behavior when packet reads during decoding block the entire player. In theory, we should try to increase the cache if underruns happen too often. Unfortunately, changing the cache implementation would be very hard, because it's insane code (forks, uses shared memory and "volatile" etc.). So for now, this just reduces the frequency of the stuttering if the network is absolutely too slow to play the stream in realtime.
* cache: simplify furtherwm42012-12-031-8/+17
| | | | | | | | | | | | This commit is separate from the previous one to separate our own changes from changes merged from mplayer2 (as far as that was possible). Make it easier for stream implementations to request being cached. Set a default cache size in stream.c, and remove them from various stream implementations. Only MS streaming support sets a meaningful cache size. Make querying cache size saner. This reduces the amount of #ifdefs needed.
* cache: refactor how cache enabling is doneUoti Urpala2012-12-031-25/+14
| | | | | | | | | | | | | | | | | | | | | | | | Code enabling the cache by default for network streams did that by modifying the value of the "cache" option. This wasn't sane, as multiple streams may be created and all share the same options. Change the code to not modify options but store data in the stream instance instead. Conflicts: core/mplayer.c demux/demux.c stream/cache2.c stream/network.c stream/network.h stream/pnm.c stream/stream.c stream/stream_rtp.c Merged from mplayer2 commit e26070. Note that this doesn't solve any actual bug, as the playlist crashing bug has been fixed before. Since the global cache size option value is not overwritten anymore, the option doesn't need to be restored on end of playback (M_OPT_LOCAL).
* build: identify the build time of the binary in the versioning outputStephen Hutchinson2012-12-031-1/+1
| | | | | | | | | | Based on a patch by qyot27. Add export LC_ALL=C on top of version.sh to make the output locale independent. Note that the build time will not be updated on every "make" invocation, but only when the git revision is updated. This is a good thing, as repeated make invocations should not rebuild the binary. (This would break "sudo make install" too.)
* mplayer: fix track language displaywm42012-11-251-1/+2
| | | | | | This caused e.g. "--alang=" (without anything following) to be printed in the terminal output when the file specified no language for the track. Introduced by commit 9085b8.
* core: minor cleanupswm42012-11-201-1/+0
| | | | | | | Enable printf format warnings for set_osd_[t]msg. Remove the pointless assertion in mplayer.c (the assertion proved that the following NULL check is probably pointless, but leave that check anyway for robustness - it's not really clear whether it's needed).
* osd: fix OSD status symbol display in some caseswm42012-11-201-7/+14
| | | | | | | | | | | | | | | | | | | | | The playback status symbol in the OSD status display on video (such as displayed when seeking or with the show_progress input command) sometimes kept displaying the last seek, without resetting the symbol. (For example: disable the OSD, seek, enable the OSD, run show_progress; but also other cases.) The main reason for that was the code clearing the OSD bar is also responsible for clearing the osd_function (which stores the playback symbol). If no OSD bar was set, the osd_function was never reset. Fix by always setting the timer for clearing the OSD bar and the osd_function whenever the osd_function is set. Clearing the OSD bar when it wasn't set is OK. If the OSD bar is set some time after osd_function is set, the timer is overwritten - that's a good thing, as it makes both disappear from the screen at exactly the same time. Always reset osd_function to 0 and determine the playback status explicitly from mpctx->paused when displaying the status on screen.
* mplayer: disable auto-loading of external codecs.confwm42012-11-201-13/+4
| | | | | | | | | | Do not load codecs.conf files located in $PREFIX/etc/mpv/ or ~/.mpv/. There really is no use for this, other than possibly breaking things. It's still possible to use --codecs-file explicitly to load an external config file, and this option can be used in ~/.mpv/config. While we're at it, remove the global codecs_file variable, and another unused variable.
* osd: make the OSD and sub font more customizablewm42012-11-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make more aspects of the OSD font customizable. This also affects the font used for unstyled subtitles (such as SRT), or when using the --no-ass option. This adds back some customizability that was lost with commit 74e7a1 (osd: use libass for OSD rendering). Removed options: --ass-border-color --ass-color --font --subfont --subfont-text-scale Added options: --osd-color --osd-border --osd-back-color --osd-shadow-color --osd-font --osd-font-size --osd-border-size --osd-margin-x --osd-margin-y --osd-shadow-offset --osd-spacing --sub-scale The font size is now specified in pixels as it would be rendered on a window with a height of 720 pixels. OSD and subtitles are always scaled with the window height, so specifying or expecting an absolute font size doesn't make sense. Such scaled pixel units are used to specify font border etc. as well. (Note: the font size is directly passed to libass. How the fonts are actually rasterized is outside of our control, but in theory ASS font sizes map to "script" pixels and then are scaled to screen size.) The default settings should be about the same, with slight difference due to rounding to the new scales. The OSD and subtitle fonts are not separately configurable. It has limited use and would double the number of newly added options, which would be more confusing than helpful. It could be easily added later, should the need arise. Other small details that change: - ASS_Style.Encoding is not set to -1 for subs anymore (assuming subs use VSFilter direction in -no-ass mode too) - use a different WrapStyle for OSD - ASS forced styles are not applied to OSD
* core: fix crash when video filter returns inf as PTSwm42012-11-201-1/+1
| | | | | | | | | | | | | | | | | | | When a video filter returned inf as PTS, the player crashed. One reason for this was that decode_audio() was called with a negative minlen parameter, which at some point caused it to call a memory allocation function with a ridiculous value, triggering an out of memory code path in talloc.c. (talloc.c has been modified to abort() on out of memory situations.) Fix this by sanity checking minlen in decode_audio(). (The check against outbuf->len always succeeded, because it's an unsigned comparison.) Make an existing sanity check in mplayer.c more robust: check for NaN too, which happens if the video PTS is inf. This happened with "-vf pullup,softpulldown" (but is not triggered when the following commit is applied).
* mplayer: fix potential issue when ao_play() failswm42012-11-201-1/+2
| | | | | | | | | ao_play() can fail; in that case a negative error code is returned. This error code is returned by write_to_ao() in turn. The function fill_audio_out_buffers(), which calls write_to_ao(), doesn't check for any error codes, and will likely trigger the assertion following the function call. Change write_to_ao() to return 0 on failure to hopefully prevent crashes when AOs fail.
* stream: fix dvd:// + cache crashingwm42012-11-201-2/+2
| | | | | | The language string was dynamically allocated, which completely fails if the cache is forked (which it usually is). Change it back to a fixed length string, like the original code had it.
* stream, demux: replace off_t with int64_twm42012-11-201-2/+2
| | | | | | On reasonable systems, these types were the same anyway. Even on unreasonable systems (seriously, which?), this may reduce potential breakage.
* options: support chapters for --start and --endwm42012-11-201-0/+4
| | | | | | | | | | | | | The --start and --end switch now accept a chapter number. The chapter number is prefixed with '#', e.g. "--start=#2" jumps to chapter 2. The chapter support might be able to replace --chapter completely, but for now I am not sure how well this works out with e.g. DVDs and BDs, and a separate --chapter option is useful interface-wise. (This was supposed to be added in 51503a, but apparently the fixup commit adding it was lost in a rebase. This might also be the reason for the mess-up fixed in 394285.)
* subtitles: improve support for libavformat demuxed subtitleswm42012-11-161-1/+18
| | | | | | | | | | Make demux_lavf not error out if no video or audio track is present. This allows opening subtitle files with the demuxer. Improve the test whether subtitles read from demuxers must do explicit packet reads. (I'm not sure whether always doing these reads could have bad effects, such as reading too many audio and video packets at once, so be conservative.)
* mplayer: refactor: move computation of a/v syncwm42012-11-161-21/+26
| | | | | | The computation for the A/V sync value was inside print_status(). Move it into its own function; this makes things simpler and gets rid of some minor dead code.
* core: add --keep-open, which doesn't close the file on EOFwm42012-11-161-0/+14
| | | | | | | | | | | | | | | | | The --keep-open option causes mpv not to close the current file. Instead, it will pause, and allow the user to seek around. When seeking beyond the end of the file, mpv does a precise seek back to the previous last known position that produced video output. In some corner cases, mpv might not be able to produce video output at all, despite having created a VO. (Possibly when only 1 frame could be decoded, but the video filter chain queues frames. Then a VO would be created, without sending an actual video frame to the VO.) In these cases, the VO window will not redraw, not even OSD. Based on a patch by coax [1]. [1] http://devel.mplayer2.org/ticket/210#comment:4
* command: add sub_reload and sub_remove commandswm42012-11-161-6/+37
| | | | | | | | | | sub_remove remove an external subtitle track, for whatever this may be needed. sub_reload removes and re-adds an external subtitle track. Also rename sub_load to sub_add, because that seems to be more in line with sub_remove.
* subreader: replace sub_free() by talloc destructorwm42012-11-161-7/+4
| | | | Makes it less annoying to free the sub_data.
* options: add --mute for setting initial audio mute statuswm42012-11-161-3/+5
| | | | | Similar to --volume. Takes this as opportunity to move the variable corresponding to --volume into MPOpts.
* options: rename -ss and -endpos, allow relative timeswm42012-11-161-20/+48
| | | | | | | | | | | | | | | | Rename the -ss option to -start, and -endpos to -length. Add a -end option. The -end option always specifies an absolute end time, as opposed to -endpos/-length. All these options (--start, --end, --length) now accept relative times. Percent positions (e.g. "--start=30%") are interpreted as fractions of the file duration. Negative times (e.g. "--start=-1:00) are interpreted relative to the end of the file. Chapters (e.g. "--start=#3") yield the chapter's time position. The chapter support might be able to replace --chapter completely, but for now I am not sure how well this works out with e.g. DVDs and BDs, and a separate --chapter option is useful interface-wise.
* mplayer: do not freeze when trying to loop an unseekable filewm42012-11-141-1/+13
| | | | | | | | | | | | | | Using --loop=inf on an unseekable file would put mpv (and all other mplayers as well) into an endless loop, trying to seek to the start of the file on each playback loop iteration. When the seek fails, playback simply remains in the at-end-of-file state, and tries to issue a new seek command for looping. Fix by checking if the seek command fails, and abort looping in this case. For that, queue_seek() is replaced with seek(). Due to the circumstances, these two calls happen to be equal in this case: the seek is absolute (i.e. no seek coalescing done), and the execution of queued seeks is right after the loop code anyway.
* clang: fix all warnings except deprecationsStefano Pigozzi2012-11-131-1/+3
|
* Add MP_NORETURN and replace av_noreturn useswm42012-11-121-1/+1
| | | | | av_noreturn is a rather recent addition to libavutil, and defining it ourselves is trivial and makes playing compatibility games easier.
* Rename directories, move files (step 2 of 2)wm42012-11-121-37/+37
| | | | | | | | | | | | Finish renaming directories and moving files. Adjust all include statements to make the previous commit compile. The two commits are separate, because git is bad at tracking renames and content changes at the same time. Also take this as an opportunity to remove the separation between "common" and "mplayer" sources in the Makefile. ("common" used to be shared between mplayer and mencoder.)
* Rename directories, move files (step 1 of 2) (does not compile)wm42012-11-121-0/+4302
Tis drops the silly lib prefixes, and attempts to organize the tree in a more logical way. Make the top-level directory less cluttered as well. Renames the following directories: libaf -> audio/filter libao2 -> audio/out libvo -> video/out libmpdemux -> demux Split libmpcodecs: vf* -> video/filter vd*, dec_video.* -> video/decode mp_image*, img_format*, ... -> video/ ad*, dec_audio.* -> audio/decode libaf/format.* is moved to audio/ - this is similar to how mp_image.* is located in video/. Move most top-level .c/.h files to core. (talloc.c/.h is left on top- level, because it's external.) Park some of the more annoying files in compat/. Some of these are relicts from the time mplayer used ffmpeg internals. sub/ is not split, because it's too much of a mess (subtitle code is mixed with OSD display and rendering). Maybe the organization of core is not ideal: it mixes playback core (like mplayer.c) and utility helpers (like bstr.c/h). Should the need arise, the playback core will be moved somewhere else, while core contains all helper and common code.