* protect against invocations of ctype-macros/-functions with negative
character indices by mirroring the corresponding values at negative
array indices (the legal access range of __ctype_b is now [-128..255])
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38708 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
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
(This is just until we do proper irq-handling)
On my machines it works either way so I'd like to get feedback on this.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38695 a95241bf-73f2-0310-859d-f6bbb57e9c96
section of AboutSystem, for their efforts in developing and bringing Stack and
Tile to Haiku. Thank you!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38693 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
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
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
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
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
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
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
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
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
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
Added BurnItNow, both a gcc2 and gcc4 build.
Added Bazaar, both a gcc2 and gcc4 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38665 a95241bf-73f2-0310-859d-f6bbb57e9c96
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
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
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
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
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
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