Commit Graph
100 Commits
Author SHA1 Message Date
Stephan Aßmus ed74106bcb * Added more comments to the code.
* Cleanup ParseStates in case the input didn't have
   all closing tags.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38824 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 20:32:38 +00:00
Stephan Aßmus 676c1e9694 Let client applications set a DrawingMode() which will be the
default drawing mode for text rendering. Don't override it
with B_OP_COPY (still the default). Should not have any
consequences in any existing use-case. The MediaPlayer can
use BTextViews to render semi-transparent subtitles this way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 20:25:57 +00:00
Stephan Aßmus 25fb0e67fd Added SubtitleBitmap class which can create a transparent
BBitmap from a subtitle line as found in SRT files. It
supports all tags except positioning (should probably be
handled in upper layers anyway). The parsing is simplistic
but should be robust. The layout of text is handled by an
offsreen BTextView. VideoView can be given a subtitle
string.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38822 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 20:24:04 +00:00
Stephan Aßmus dce7934b8d Added support for one more non video/audio MIME type.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38821 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 20:21:28 +00:00
Stephan Aßmus a58469f56e Allow to set the false bold width in BTextView style runs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 12:49:57 +00:00
Stephan Aßmus b6d5916a70 Since a lot of MediaPlayer code would actually
not compile on BeOS anymore, I've removed the
BeOS versions from the rest of the source.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38815 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 09:52:20 +00:00
Stephan Aßmus 749df748eb Propagate the error from CreateBuffers() in Connected().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38814 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-26 09:45:07 +00:00
Stephan Aßmus cc3a891e38 Only claim specific support for multi-media file types that
don't belong to the audio or video super type. All other files
should now open automatically with MediaPlayer since r38810
even without it claiming direct support for them.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38812 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-25 14:50:18 +00:00
Stephan Aßmus a4b60639b1 Patch by plfiorini from ticket #4501. Untyped FLV movies
shall be auto-identified. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38811 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-25 14:47:58 +00:00
Stephan Aßmus 08ac2a4987 I don't quite understand why the preferred handler of
the super type is only regarded for "installed" MIME types.
The comment says that uninstalled MIME types are assumed
to be application MIME types, but this is clearly not always
the case. Initializing the secondary signature regardless
fixes the problem that unkown document MIME types open in
a random application, even though their super type has a
preferred handler. If the type is indeed an application
itself, I suppose no harm is done, since the primary
signature takes precedence anyway. Closes ticket #4501.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38810 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-25 14:43:25 +00:00
Stephan Aßmus 73dcf86fdc * Don't create Stream cookies for unsupported media formats.
Some test clips with sub-title tracks would hang MediaPlayer
   without this fix here.
 * Optimize FindKeyFrame() and Seek(), check the range between
   last requested/reported frame and bail out early with the
   same result. Seems to fix MediaPlayer starting to drop frames
   when it got caught up in a keyframe finding party...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38808 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-24 20:14:10 +00:00
Stephan Aßmus af0f809b75 Rewrote finding keyframes and seeking. The problem was that
in many situations, FindKeyframe() was unable to reliably
predict what frame Seek() would be able to seek to.
 * Refactored a new base class StreamBase from the old
   StreamCookie, renamed StreamCookie to just Stream.
 * In FindKeyframe(), Stream will create a "ghost" StreamBase
   instance. That one will be used to actually seek in the
   stream without modifying the AVFormatContext of the real
   Stream. From that we can tell what position we can /really/
   seek to. For AVIs mostly, it is important to still use
   av_index_search_timestamp(), since for many AVIs I tested,
   reading the next packet after seeking did not produce a
   timestamp, however the index entry contained just the correct
   one. If the next packet does contain a PTS, it will still
   override the index timestamp, though.
 * Contrary to my previous belief, there was still a locking
   problem with how MediaPlayer used the BMediaTracks. The video
   decoding thread and the playback manager both used
   FindKeyframe() without holding the same lock. We support this
   now by using one BLocker per Stream. (The source BDataIO is
   still protected by another single lock.) With the new ghost
   stream stuff, the locking problem became much more of a problem,
   previously the FindKeyframe() had a much rarer race condition
   which would only trip when the decoding thread would cause new
   index entries to be inserted into the index.
 * Use the same ByteIOContext buffer size that avformat would be
   using if it initialized the ByteIOContext through other API.
 * Don't leak the probe buffer in case of error.
 * Don't leak the ByteIOContext buffer in the end.
 * Do not discard other stream packets anymore, this makes the
   ASF demuxer happy and ASF files can now be seeked as well as
   with ffplay itself.

With these changes, all my MPEG test streams work. Some could be seeked
before, but would show bad artifacts. Some streams would completely loose
video after seeking once. My MPEG2 test stream works much better now,
although audio is slightly out of sync, unfortunately. All my test AVIs
work as good as before, MP4 and MKV still work perfectly. The single
test ASF I got is now perfectly seekable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38807 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-24 16:54:42 +00:00
Stephan Aßmus 954d70d8c0 * Renamed fAudioTempPacket to fTempPacket and use it for calling
the new video decoding function. This just avoids a warning
   generated from the libavcodec sources. The function used before
   did the exact same thing...
 * Maintain fStartTime correctly in _DecodeVideo(). Don't overwrite
   it with a calculated starttime in Decode(). This will allow drift
   to bubble up to the higher layers.
 * Do not use the previously required hack to close and reopen the
   AVCodec after seeking. avcodec_flush_buffers() seems to work
   fine now, and for certain stream types (MPEG1, MPEG2 video for
   example) the keyframe is correctly used after seeking.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38806 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-24 16:40:56 +00:00
Stephan Aßmus a92abad742 In the unexpected case that an extractor seeked forward while we actually
asked to seek backwards, cause us to produce silence. This fixes some
occasionally very unpleasant noise after seeking.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38805 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-24 16:35:11 +00:00
Stephan Aßmus c1e73fbf52 Enabled any and all decoders and demuxers which are currently compiled into
FFmpeg. It's a bit sad, but this obsoletes pretty much all other decoder
and reader plugins. Some of them were built on external libraries as well
(AC3 (not part of default image anyway, since it's GPL), APE, MusePack),
so it's not really a big difference to using FFmpeg as external library.
The format matching is greatly simplified by using B_MISC_FORMAT_FAMILY
for everything but raw audio, and the actual FFmpeg CodecID as codec tag.
The downside of this is that the AVFormatReader can no longer be used with
other decoder plugins, but it would be easy to add special cases for native
decoders we wish to support. Obviously the out of the box support for file
formats and decoders has greatly increased with this change, so there has
to be a pretty good reason now for writing a "native" decoder or reader.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38786 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-22 11:10:51 +00:00
Stephan Aßmus 9291985ba8 * Exchange the round knob for a standard block thumb again,
albeit a smaller one. Makes the interface look even more
   standard Haiku-like.
 * Make sure the volume slider has a reasonable minimum width.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38765 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 18:37:14 +00:00
Stephan Aßmus fd5c34224c * Show the window when opening files, since that shows the nice
"opening file bla" message and makes starting MediaPlayer feel
   even more snappy.
 * Show the window at the no-video location when opening files.
 * Move the "Drop files to play" message handling into MainWin
   and make sure it shows after failed attempts to open a file
   when the playlist is still empty.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38764 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 16:04:24 +00:00
Stephan Aßmus ad471f9969 Typo
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38763 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 16:01:56 +00:00
Stephan Aßmus 80fc6f9e47 Claim support for Shockwave videos.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38762 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 16:01:35 +00:00
Stephan Aßmus d62aaeb68d * Changed pretty extractor names to sentence casing.
* Enabled SWF demuxer in FFmpeg (though the one test file
   I have is compressed, which is not supported by the FFmpeg
   SWF demuxer...).
 * Removed testing TODOs for demuxers that I tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38761 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 16:00:50 +00:00
Stephan Aßmus 40379e325c * Always assign fSource in _InitReader(), even if we will
wrap it in a BBufferIO. Makes the code cleaner.
 * Check if source is a BFile and propagate InitCheck() of
   the BFile. When trying to open a BMediaFile on a non-existant
   file, it will correctly say the file does not exist instead
   that there is no handler for it. (IIRC there is a ticket
   for this.)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38760 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 15:58:28 +00:00
Stephan Aßmus ebd866299d * Added new Playlist notification ImportFailed().
The PlaylistListView will trigger it when the import command
   failed (happens for example when none of the files are
   media files).
 * Moved displaying the according alert from the import fommand
   into the MainWindow. Show the window if necessary. This fixes
   MediaPlayer just idling in the Deskbar without any window
   in this case, since the MainWindow is shown after the first
   call to _SetupWindow() since some time. But _SetupWindow() is
   not invoked when no file could be opened.
 * Removed some meanwhile useless debug output. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38757 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-21 14:47:21 +00:00
Stephan Aßmus 5051e989f6 Committed more than I intended to in the last commit. Sorry.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-20 19:05:06 +00:00
Stephan Aßmus b145959bdd * Use the same GCC flags for GCC4 that configure in the FFmpeg source
itself generates.
 * For GCC2, FFmpeg uses -fPIC instead of -DPIC. Also disable SSE for
   GCC2, since that fixes a crash in the SSE version of clear_block().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38747 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-20 19:03:03 +00:00
Stephan Aßmus d3aadcff6c In FFmpeg SVN r22715 (I suppose), there was an optimization done to
speed up VLC table (whatever it is) initialization. Somehow the code
does not work on GCC2. Use the old code we had previously in SVN
minus a flag (INIT_VLC_USE_STATIC) which is no longer used in FFmpeg.
This fixes the GCC2 build of FFmpeg and closes Ã#6643, #6582 and #656.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-20 18:24:31 +00:00
Stephan Aßmus e111b1c12f For GCC2, the FFmpeg configure script is generating a slightly
different config.h, of which I am adapting the differences in this
commit. Does not change a thing for the broken GCC2 build of FFmpeg.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-20 18:01:22 +00:00
Stephan Aßmus f70b711fe0 * Flesh out attribute support in PlaylistItem/FilePlaylistItem
some more.
 * Finish refactoring and abstracting BMediaFile/BMediaTrack
   out of the Controller. There is TrackSupplier now and
   MediaFileTrackSupplier. One could now implement another
   PlaylistItem class besides FilePlaylistItem, which provides
   other implementations for TrackSupplier (i.e. for testing
   DVD playback).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38722 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-19 12:07:48 +00:00
Stephan Aßmus d48deeab21 * Coding style.
* Always use keyframes. The BMediaTrack may not be able
   to implement FindKeyFrameForFrame(), so the detection
   may not work even though the track really does use
   keyframes. If it doesn't, then no harm is done anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-19 12:05:01 +00:00
Stephan Aßmus f4dca596ed Coding style improvements.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38720 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-19 12:03:35 +00:00
Stephan Aßmus 9a52ead33e * Don't try to change the run-mode of the consumer
if it has not been created yet. (Avoids a debug
   message only.)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38719 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-19 12:02:47 +00:00
Stephan Aßmus 3a8771cf17 * Use duration_to_string() to write better playing time
attribute strings (i.e. with separate hour).
 * Write video bitrate attribute.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38718 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-19 12:02:00 +00:00
Stephan Aßmus 6df16a01ed * Seeking by bytes works mostly correctly now. In some
mpgs, the video does not recover, though.
 * Remember the last reported keyframe information, so we
   avoid rounding artifacts. Not as effective, since we
   cannot use stream time-base for seeking, but have to use
   it for finding the keyframes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38706 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-18 15:11:50 +00:00
Stephan Aßmus 2e54e93fbf Finall changed the Seek() method of Decoder plug-ins to
SeekedTo(), since it's only informative to decoders. They
can't modify the seeked frame/time. This also mirrors what
all existing decoders were doing in Seek(). BMediaTrack
is simplified accordingly (resolved two TODOs).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-18 14:44:22 +00:00
Stephan Aßmus 5bacae95fe Make use of the new meta-data API and display the
audio track menu item label as the language of the
track.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38688 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-17 08:33:25 +00:00
Stephan Aßmus d174a87e1b If we still have our own BBufferGroup separate from
the used BBufferGroup (from consumer), make sure to
delete that one as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-17 08:32:27 +00:00
Stephan Aßmus 3c0f00c5ec * Theoretically implemented seeking by bytes,
if the input format requires it. Practically,
   it does not work.
 * Implement the new meta-data API.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-17 08:06:55 +00:00
Stephan Aßmus 7cd3a2490b Implemented an API to get arbitrary meta-data about
BMediaFiles and about BMediaTracks in BMessages. As an
example, one can get chapter meta-data or the language
name of an audio-track.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-17 08:04:26 +00:00
Stephan Aßmus cefc9ef227 Corrected debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-17 08:02:41 +00:00
Stephan Aßmus 8a7cbd8350 Always ignore found index entries after we detect
the stream is building the index on the fly once.
This allows to seek back to earlier positions, since
then the index will contain entries for later in the
stream and the logic to detect auto-generated indices
was broken.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38678 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 15:27:16 +00:00
Stephan Aßmus 7b61b6b8e4 Finally: Seeking audio in MKV files works when seeking the
muxer by the "default" stream. When I previously tried this,
I mistakenly remembered AV_TIME_BASE to be 1000, but it's
1000000, the same as the native bigtime_t time representation.
Luckily, we can still set all other streams (including the
"default" stream) to be discarded when obtaining chunks
packets.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38677 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 15:13:24 +00:00
Stephan Aßmus 91debc877a Patch by diver, translating some yet untranslated strings.
Closes ticket #6609. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38676 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 14:35:43 +00:00
Stephan Aßmus 108f794c97 Patch by mt: Translate various yet untranslated strings in libtracker,
closes ticket #6374. Thanks a bunch!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38675 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 14:30:20 +00:00
Stephan Aßmus 6936b3ba4f Added support for bz2 compressed stuff in Matroska containers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38674 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 13:57:33 +00:00
Stephan Aßmus 51802669a5 Fixed a warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 13:56:12 +00:00
Stephan Aßmus b524af7e81 In case of time-out to generate a frame, leave the last
frame on-screen, instead of going black until catching up.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38672 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 13:55:11 +00:00
Stephan Aßmus a110536aac When the video is paused, use the left/right cursor keys
for single frame stepping instead of winding. One frame without
shift-modifier, five frames with shift held down.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38671 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:45:03 +00:00
Stephan Aßmus 892e4f21be * Changed the VideoSupplier interface to allow forcing the
video generation. This allows step back frame-wise even though
   it means the video has to seeked back far and re-generated more
   than five frames ahead to reach the seek frame.
 * Don't print dropped frames in the producer when the video
   is paused.
 * Don't lock the PlaybackManager to report dropped frames,
   report it later when the manager had to be locked anyway.
 * Removed a whole bunch of methods that were only implemened
   because of that old BeOS PPC compiler bug.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38670 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:43:41 +00:00
Stephan Aßmus b80311be97 Only seek to keyframes when the difference in frames
is more than 5 frames.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38669 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:39:51 +00:00
Stephan Aßmus 6edc3b4193 Code simplification and a commont on why fOurBuffers is
maintained as member variable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38668 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:38:41 +00:00
Stephan Aßmus 89f25d71bf Enabled the code which sets the consumer run-mode based
on the current play back mode. I.e. paused or stopped
playback get's B_OFFLINE run-mode, which makes sure the
Consumer does not drop frames when they are too late.
When single stepping frames backwards, the producer may
have needed a lot of time to generate a frame and it may
arrive late, which is no problem when the video is paused.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38667 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:37:45 +00:00
Stephan Aßmus 280a22fdec Removed no longer useful debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38666 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-16 12:36:11 +00:00
Stephan Aßmus 05e6afd6ea Always wait for buffers in AudioProducer::_FillNextBuffer().
Seems to work around a problem in the system mixer. When it
happens once that the AudioProducer does not send a buffer,
then it can eventually lead to a drop into the debugger
from BBuffer::SetHeader(), which to me looks like the BMediaEventLooper
thread of the mixer still runs when the System Mixer has been
shut down, which itself is yet another problem. I shall
investigate, but for the time being, one should enjoy a more
stable media_addon_server life-time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38664 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 22:23:50 +00:00
Stephan Aßmus 8eb72c7217 Fixed warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38663 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 19:58:48 +00:00
Stephan Aßmus f7eb8be930 * Instead of using some bogus latency for the VideoProducer,
compute the latency from the buffer count. It should be
   the duration of in-flight buffers (i.e. number of buffers
   minus the one currently showing).
 * Compute the wakeUp time based on the buffer latency used
   above.
 * Make the "wasCached" mechanism work again, i.e. don't send
   the buffer to the consumer if the contents did not change.
   This removes the need to cache frames in the ProxyVideoSupplier
   and thus one more memcpy() (5ms on my Q6600 for full-HD content).
 * Remove the weird forceSendingBuffer override and the setting
   of the header starttime to 0. Now seeking clips works also
   when the playback is paused.

All in all, playback is more efficient now, and the chances of
dropping frames are much less. Something is still fishy, though,
since VLC, even though seemingly using slightly more CPU, drops
frames more seldomly than MediaPlayer. Audio/Video sync seems to
be better, though, since the VideoProducer is using a more accurate
latency now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 18:15:20 +00:00
Stephan Aßmus 6eac6bdea9 * fMyLatency (stupid name) had an arbitrary bogus value,
it should be more like the scheduling latency, if anything.
 * fBufferMap contained uint32 values, instead of simply the
   BBuffer pointers.
 * fBufferMap was initialized in a very complicated way,
   simply use the BBuffer pointer returned from
   fBuffers->AddBuffer().
 * Removed methods which were only implemented because of a
   Codewarrior compiler bug.
 * Renamed fTargetBufferIndex to fLastBufferIndex, since it's
   the index of the last used BBuffer from fBufferMap, which
   needs to be recycled when the next buffer is received.
 * SetOutputBuffersFor() never worked (making the producer
   use the consumer buffer group), since it was passed the
   never initialized fDestination. Use fIn.destination.
 * But using our own buffer group did not yet work, since
   apparently the BBuffer pointers cannot be compared like
   the code did (no idea if it ever worked on BeOS).
   Compare the ID()s instead, which makes it finally work to
   save an unnecessary memcpy(). Interestingly, one can
   call Recycle() on the "wrong" BBuffer pointer and buffers
   still get recycled correctly.
 * Refactored methods _UnsetTargetBuffer() and _HandleBuffer().
 * Maintain the performance start time, may come in handy later.
 * Changed code that checks lateness or earliness of buffers.
   In case a buffer is early, simply wait.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 17:49:47 +00:00
Stephan Aßmus a0e92900de Pulse() may run twice before receiving the next
data, so we should prevent showing a current
peak of 0. Fixes the periodic 0 peaks.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38660 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 17:37:41 +00:00
Stephan Aßmus 2baccbd9fb Fix retrieving the frame rate for real. Apparently
it can be any of these values, hope the priority is right.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38659 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 16:32:44 +00:00
Stephan Aßmus 31879da81c Use the correct field of the AVStream for the video
frame rate (perhaps it changed in 0.6?). This fixes
playback of several MP4 clips I have for testing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-15 08:35:47 +00:00
Stephan Aßmus 3975779fc2 Use the exact time the event was supposed to fire,
not the current real time. If I understand things
correctly, using the mechanism to send a MessageEvent
is just there to invoke SetPerformanceTime() within
the PlaybackManager BLooper (I could be mistaken).
Need to check whether this fixes a drift in audio
and video I am often observing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 20:18:34 +00:00
Stephan Aßmus 5aaa020871 The max time to take for rendering is arbitrary,
might as well take an even value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38654 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 20:16:26 +00:00
Stephan Aßmus c3f9ae128a Set the processing latency using the time it
took to decode the last frame.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38653 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 20:15:10 +00:00
Stephan Aßmus 449c016b46 Small coding style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38652 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 20:14:04 +00:00
Stephan Aßmus 5a6b18e914 * Print the performance stats every five frames, and reset
the counters, so it's not the average for the entire
   decoding time, but for the last five frames. This gives
   a more accurate picture of what's going on.
 * Added NOTE about possibly removing the SWS version of the
   colorspace conversion code unless it's used for otherwise
   unsupported conversions. David's code is about 40% faster
   in my tests (nice job!).
 * Free the sws context in NegotiateVideoFormat, if necessary.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 18:43:58 +00:00
Stephan Aßmus d21b55880b For full HD clips, the real-time memory chunk cache
was not big enough. Axel, perhaps another solution is
better? Would you prefer the chunk cache to fall-back
to regular memory and keep track of allocation type?


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38649 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 18:37:37 +00:00
Stephan Aßmus 5021eb2421 Removed the "native" ogg, vorbis, theora and speex plugins in favor
of support for these codecs and demuxer in the FFmpeg plugin. The
ogg test streams I downloaded play fine now. For example, Big Buck Bunny
would play without video before and ogg files natively encoded with the
FFmpeg plugin wouldn't play at all. Since the removed plugins were not
maintained and were based on external libs themselves, I didn't see the
point in keeping them.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38646 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 12:32:04 +00:00
Stephan Aßmus 594039f10d Imported libspeex 1.2rc1 for use in libavcodec's libspeexdec.c.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 12:24:09 +00:00
Stephan Aßmus b98aa3ef8b Removed left-over debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38644 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-14 09:27:18 +00:00
Stephan Aßmus 73e5249c79 * Enabled libvorbis and libtheora encoders in FFmpeg
* Enabled ogg muxer in MuxerTable.

ogg/vorbis creation successfully tested with MediaConverter.
ogg/theora needs more testing, it seems to work, but I need
to switch from the other vorbis/theora/ogg plugins to the
FFmpeg built-in support, otherwise the current theora stream
is not supported by the old plugin.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 20:25:24 +00:00
Stephan Aßmus 0640823932 Added libtheora 1.1.1 into FFmpeg folder as libtheora_ffmpeg.a
in order not to clash with the old libtheora in the theora plugin.
x86 CPU optimizations are only compiled for GCC4.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 20:23:08 +00:00
Stephan Aßmus d45314ec30 Added libvorbis 1.3.1 into FFmpeg plugin folder. Target name is libvorbis_ffmpeg.a
in order not to clash with the old libvorbis in the vorbis plugin. I plan to remove
that one after I've done more testing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38639 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 20:21:08 +00:00
Stephan Aßmus 611ab2d824 Added libogg 1.2.0 into FFmpeg plugin folder.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38638 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 20:18:06 +00:00
Stephan Aßmus bc04b5141e Disable float_to_int16_interleave_sse2 in favor of
float_to_int16_interleave_sse, since it crashes for reasons
I would have no clue about. Fixes a few duplicated tickets,
which I'll have to sort out later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 18:27:49 +00:00
Stephan Aßmus 5393fabac1 Disable some annoying debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38635 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 16:19:07 +00:00
Stephan Aßmus 0b1bbe06ac Small coding style fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38634 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 16:02:52 +00:00
Stephan Aßmus fdd9addfce Patch by diver: Localize the Locale window title. Closes ticket #6594. Thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38628 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 12:52:32 +00:00
Stephan Aßmus f2afc4be64 Patch by diver: Localize Find window title. Thanks! Closes ticket #6593.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-13 12:41:32 +00:00
Stephan Aßmus 188b1fe0d1 Patch by diver, the "About DiskProbe" menu entry was not localized.
Small coding style fixes by myself. Closes #6590. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 18:55:31 +00:00
Stephan Aßmus f3d6fe6493 Disabled ffmpeg build for anything than x86, since there are problems
on PPC and it was pointless to give the PPC developers trouble while
there isn't even a desktop on PPC yet. Sorry about that!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 10:01:22 +00:00
Stephan Aßmus 341ea11eb3 Implemented enlarging controls in full-screen mode, it's optional
and the setting defaults to "on".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 09:59:35 +00:00
Stephan Aßmus aea4a383fe * Figure out the layout insets of the slider bar, and use them for
the insets of the rest of the layout. Makes sure that the spacing
   is the same between all controls.
 * Use the system font size for figuring out the symbol size.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38604 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-11 08:55:30 +00:00
Stephan Aßmus 004b420b08 Make sure the duration view has a fixed width for
all display modes for a given clip.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38603 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-11 08:54:14 +00:00
Stephan Aßmus 8f0617aa0d Fixed winding for video. We need to distingish between
requested seek-frame and snapped-to-keyframe seek-frame.
Not comletely perfect, since sometimes video snaps back
to the same keyframe two or more times, but winding works
anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38600 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-10 14:40:04 +00:00
Stephan Aßmus 4d6c88624e * _CurrentVideoSizeInPercent() returned wrong values,
but it didn't result in wrong behavior before.
Implemented more keyboard actions from ticket #2495:
 * +/- zoom the video now (by +/- 10% of current scale).
 * ZXCVB (raw keys hardcoded, i.e. the keys along the bottom
   of the keyboard) act as playback buttons: skip previous (Z),
   play (X), pause (C), stop (V), skip next (B).
 * Renamed "No interface" menu item to "Hide interface" and
   changed the shortcut to Cmd-H. This item is only available
   with video streams, though.
 * 'M' will mute/unmute the audio.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-10 12:04:57 +00:00
Stephan Aßmus 1c1de1a5cd The Media:Rating attribute can now be controlled via
the new Attributes menu. Added a TODO for how this should
eventually work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38598 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-10 11:15:28 +00:00
Stephan Aßmus 7fee522dd0 * Moved the Settings menu items into the MediaPlayer menu.
* Removed the Settings menu in favor of a new Attributes
   menu (does not offer anything yet).
 * The context menu was showing two separator items by mistake
   (after the About item was removed from it).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-10 10:37:38 +00:00
Stephan Aßmus 811aedf9c2 New player windows returned from NewWindow() are not
automatically shown anymore since the playlist restore
changes. Unbreak opening a new player, let the application
thread open it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38596 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-10 10:07:13 +00:00
Stephan Aßmus 0beac2ff04 PlaybackManager:
* Make sure that the messages which trigger a performance
   time update a) don't pever pile up and b) that we don't
   still receive an event after reinitialization (would
   not have been a problem, at one point I thought it was).
 * Don't compile in support for changing the playback speed
   for the moment.
 * Better support for notifying the reaching of a seek frame,
   In _UpdateStates(), the wrong state (most often out of bounds)
   was checked to be a seek request state. Check if a seek request
   was reached in all other cases where states are removed.

Controller:
 * Simple but important simplification of the problem that
   seeked frames are reached asynchronously and with a latency:
   In TimePosition() simply report the seeked frame, if there
   are still pending seek requests. This allows a consistent
   view from the outside, i.e. after calling SetTimePosition(),
   TimePosition() will not return something different.
 * Use a more robust way to track pending seek requests. A
   new request may have been issued while not having reached
   the previous one yet.
 * Implement a notification for reaching the seek frame, but
   I didn't need it after all, may come in handy later...

MainWin:
 * Change the cursor left/right keys to support winding.
   Cursor up/down change the volume, Cmd-up/down skips
   to the previous/next playlist item, left/right do the
   winding now, as requested in ticket #2495.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38594 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-09 21:30:36 +00:00
Stephan Aßmus 38c4dc0eaa Small improvement in efficiency, don't invalidate the
layout when the string width did not change.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38589 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-08 21:14:31 +00:00
Stephan Aßmus 4e57cee58b * Added DurationView, defaulting to show the time remaining to finish.
* Added DurationToString to support code, used by the PositionToolTip
   as well now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-08 20:59:42 +00:00
Stephan Aßmus 737186ccb0 Fix the build and remove a note that is no longer necessary
since the file has been pretty much rewritten anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-08 20:58:36 +00:00
Stephan Aßmus 65723d8085 Doh... should have been part of my last commit. Sorry!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-08 19:52:50 +00:00
Stephan Aßmus b000c602e3 * Reimplemented the transport buttons based on BButton.
* Reimplemented the SeekSlider and VolumeSlider based on BSlider.
 * Updated the look to fit with the rest of Haiku.
 * Switched TransportControlGroup to layout management.
 * Got rid of a whole lot of ancient cruft.
 * Fixed a bunch of display bugs in PeakView.

There is no usability change, yet, except that the controls stay
centered, and that the volume slider snaps to the middle now.

I didn't check if other targets use the removed sources, before
I do a build of an image, I wanted this in SVN. I am using another
computer and have not yet had any file corruptions so far, but I
am not trusting it completely yet... :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-08 17:51:27 +00:00
Stephan Aßmus c5f8afb944 First implementation at the "loop by default" settings.
To make it better, there should be a looping mode per
window, and the settings should serve only as defaults.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38570 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 14:36:32 +00:00
Stephan Aßmus c520f2c9c9 Removed VideoNode, as it wasn't used. It's almost the same
code as the VideoNode in the TV application.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38569 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 14:18:09 +00:00
Stephan Aßmus 044dc96bce Moved TransportControlGroup into "interface" folder, as it's
a more or less generic foundation class.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 14:17:15 +00:00
Stephan Aßmus fae87f406e Make CpuCapabilities.h self-contained and thereby fix the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38565 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 12:12:07 +00:00
Stephan Aßmus 86358cb106 * Hopefully fixed the PPC build.
* Fixed coding style issues.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38564 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 11:22:02 +00:00
Stephan Aßmus 20d496c56c ff_x264_deblock_v8_luma_intra_mmxext is GPL and needs to be wrapped
in a CONFIG_GPL #ifdef (should be upstreamed, actually). This fixes
the GCC2 build (and probably GCC4) if the Haiku build is not configured
to include GPL add-ons.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38563 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 11:15:48 +00:00
Stephan Aßmus 5e7287f481 Enable run-time CPU detection. I didn't yet test this
on an older CPU.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38562 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 11:11:51 +00:00
Stephan Aßmus 6c49058008 yuv2rgb_mmx.c will now include other files depending on whether
GPL code is enabled or not. We need to build it in either case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38561 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-07 11:10:57 +00:00