History log of /haiku/src/apps/mediaplayer/Controller.h
Revision Date Author Comments
# 3248de3d 10-Jul-2018 Julien Lepiller <julien@lepiller.eu>

Mediaplayer: remember position and volume

Change-Id: I43fa7cbcedd39c39e4b136e9e1f9bb34bf3eb570


# 3065fd47 13-Dec-2017 Alexander von Gluck IV <kallisti5@unixzen.com>

MediaPlayer: Relicense to MIT

* The GPL license here was a relic from the past to help
control YellowTab's use of Haiku source code. The intent
at the time was to relicense MIT. Some GPL parts remained.
* This is going to get harder and harder to correct over time.
* This code makes Haiku *not* MIT. Lets correct that.
* I reached out to everyone who made changes to these files and
got personal approvals to relicense MIT.
* If I missed somebody, *and* you feel as though the MIT license
doesn't meet your needs, please contact Haiku, Inc. and we will
work to revert your changes.

Marcus Overhagen EMAIL - MIT OK 11/29/17
Stephan Aßmus EMAIL - MIT OK 11/28/17
Axel Dörfler IRC - MIT OK 11/29/17
Ryan Leavengood KEYBASE - MIT OK 11/28/17
Michael Lotz IRC - MIT OK 11/29/17
Adrien Destugues EMAIL - MIT OK 11/28/17
Joachim Seemer EMAIL - MIT OK 11/28/17
Jonas Sundström EMAIL - MIT OK 11/29/17
François Revol IRC - MIT OK 11/29/17
Jérôme Duval EMAIL - MIT OK 11/29/17
Oliver Tappe EMAIL - MIT OK 11/29/17
Dziadek EMAIL - MIT OK 11/29/17
Philippe Saint-Pierre EMAIL - MIT OK 12/6/17
Philippe Houdoin EMAIL - MIT OK 12/8/17
Dario Casalinuovo IRC - MIT OK 12/13/17


# 70efd0db 29-Jun-2016 Dario Casalinuovo <b.vitruvio@gmail.com>

MediaPlayer: Avoid to recreate the supplier more than needed

* MediaPlayer attempted to recreate each time the media supplier(s),
and implictly it recreated also the BMediaFile. This works fine with
local data that can be accessed fastly, but makes lots of troubles
with network streams such as BMediaIO. The result of this was that
the Streamer plugin has been recreated each time having memory and
network wasted other than performances.
* I tried to keep intact the previous logic, and it looks OK for me,
this has been done by moving out of the Controller the ownership of
the TrackSupplier and adding a little utility class that do the
releasing job previously done by the ObjectDeleter.
* Reviews are appreciated.


# c8ccdf52 27-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Added basic support for SRT subtitle files. It only works
if the SRT file is placed alongside the current playlist
item under the same name (sans extension). The name of the
language is taken from the file which needs to be separated
by a dot (should be improved).
* Instead of the black outline, subtitles have a nice drop
shadow now, which is easier on the eyes somehow.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38827 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f70b711f 18-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* 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


# 5bacae95 17-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 8f0617aa 10-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 0beac2ff 09-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 818577b2 06-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Make PlaybackManager::CurrentFrame() return int64, like
what it's internally using. Adapt NotifyCurrentFrameChanged()
implementors.
* Controller::SetTo() does not need to set the current frame,
since either Init() or FormatChanged() will have taken care
of it now.
* Reset the seeking request info in Controller::SetTo().
* Changed the parameter passed to VideoSupplier::FillBuffer()
from media_format to media_raw_video_format, so the
VideoProducer doesn't have to generate a media_format for
each frame...
* ProxyVideoSupplier caches the last produced frame, which
avoids a situation that the VideoProducer asks to generate
the same frame twice sometimes.
* In PlaybackManager::_PushState(), make sure we really
schedule the next current_frame if asked. This avoids
one situation in which the VideoSupplier was asked to generate
the same frame again and fixes playback after pausing (was
showing black video until the next keyframe before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38553 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 80a9df25 01-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Show the controls in full-screen mode when the mouse moves.
* Propagate the current audio channel count to the controls.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38490 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e663610e 18-Nov-2009 Stephan Aßmus <superstippi@gmx.de>

* Made opening playlist items asynchronous (in the Controller thread).
* Resolved TODO: Use the existing "FileChanged" notification in the main
window to adopt the UI to the currently playing item.
* When opening a file takes some time, the window is now free to start hidden
and setup a message runner to unhide it after 150 msecs.
* When launching MediaPlayer with files, the 150 msecs delay is used to
start the window hidden and pop up right at the correct location for audio.
If opening the first audio file takes less than 150 msecs, the window will
already show as soon as possible.
* While opening a file in the Controller, the window will say so in the
disabled seek slider instead of showing the message "Drop media files here.".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34132 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ab18a502 16-Nov-2009 Stephan Aßmus <superstippi@gmx.de>

* Moved the about alert handling into the application
* Simplified the handling of the first window and removed FirstWindow(),
we can tell by fPlayerCount.
* Both the above would fix a crash when requesting the about alert with the
first window already gone. Respectively another player instance opening
if fFirstWindow was reset to NULL after some recent revision.
* Implemented restoring the current playlist, index and position in the file.
* Devised a more robust way to solve asynchronous seeking. The Controller is
now notified that a seek request has been handled with a dedicated hook.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34079 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2caab6e5 28-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Coding style cleanups, no functional change.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33811 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a920a6e2 09-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Use media_format pixel_width/height_aspect as it was meant to be used. This
avoids rounding issues (1440x1080 -> 1920x1080 instead of 1921x1080).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31477 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1f3691df 28-Jun-2009 Stephan Aßmus <superstippi@gmx.de>

* In theory, we should support getting the video aspect from the current stream.
* Added "Force Aspect Ratio" to Video menu and context menu.
* Removed some code duplication in handling the video size messages.
* Added track selection sub-menus to the context menu, replacing the IMHO
not so important interface settings items.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31302 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c60fcc87 23-May-2009 Stephan Aßmus <superstippi@gmx.de>

* Changed the PlaylistItem interface to be hopefully more flexible. It can
probably still be improved.
* Renamed EntryRefPlaylistItem to just FilePlaylistItem.
* Moved the "move into Trash" and "restore from Trash" implementation into
FilePlaylistItem. Also added what's needed to allow Tracker to restore the
entry itself.
* Refactored everything to make Playlist use PlaylistItems instead of
entry_refs and all that entails...
* The transition to virtualize PlaylistItems is not complete yet in the
Controller, since it still uses BMediaFile there. But it's much easier to
change that now.
* Objects which keep a PlaylistItem around do correct reference counting, but
some commands could be simplified if they were using references as well. It
still should work correctly, though, if I didn't miss anything. It should also
fix theoretical situations of encountering out-of-memory while messing with
the Playlist leading to inconsistent state between Undo/Redo and then leaking
items because of that.
* Added the discussed change that MediaPlayer checks it's own supported types
before rejecting a file by super type. (untested)
* When importing playlist items, the currently playling item is better
maintained during Undo/Redo.
* Some debugging code added in MediaTrackAudioSupplier, no functional changes.
* Fixed a number of coding style issues and automatic whitespace cleanup.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30834 a95241bf-73f2-0310-859d-f6bbb57e9c96


# de36f715 05-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

More or less applied patch by anxiety that implements showing a file
icon in the MediaPlayer Info window. I changed it a bit, so that the
icon retrieval only happens at the file change notification (quite
important, since the info window receives playback position notifications).
I also changed it to take the icon from the file first, if there is one.
Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28520 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7060b0a2 12-Oct-2008 Stephan Aßmus <superstippi@gmx.de>

Fix playback of playlists when "auto play files" is off. The playback stopped
after every new file of a playlist.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4ddc254c 26-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented decreasing the volume of inactive player windows according to
the global settings. This is only done though if there are multiple players
open at the time. (It doesn't consider their "playing" state, though.)
* The SettingsWindow is now maintained by the MainApp, and there is only a
single instance, those settings are application wide. Also used the
"application floating" window look&feel.
* Small code cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27210 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9a5f768b 26-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented the "Auto start playback", "Close when done playing movie" and
"Close when done playing sound" settings.
* Removed unused member variables from Controller
* Changed Playlist::SetCurrentRef() to indicate success and prevent the
current index from getting out of range.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27208 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 613ecaf5 22-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Added the implementation behind the "Use overlays if available" and "Scale
videos smoothly in non-overlay mode" options.
* Disabled the other controls in the SettingsWindow which are not yet
implemented.
* Enable and disable Revert button according to settings state.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27157 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb91d005 14-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* Whether an audio and/or video node is used is now more explicit. The audio
node can now also be turned off for videos that don't have audio.
* The PlaybackManager currently has the "no audio" support added in a not
quite so nice way, will have to think about something, this is just quick
and dirty to get it going. There is just two places where the audio time
needs to be ignored, because it remains at zero.

-> Especially when using OSS, the seeking latency will be much reduced when
playing videos that have no sound.

* The Controller now maintains the frame it wanted to seek to and does not
forward "position changed" to other listeners as long as the seek frame
has not been reached. This fixes the slider jumping back to the old position
for a bit until jumping back to the seek frame. It also fixes another
problem when switching to the next file. Because the total duration is
already adopted while the old clip is still playing within the seek latency,
the current position jumped to the new relative position, while it is
still refering to the position within the old clip. So both seeking and
switching clips looks much smoother now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26415 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6ac2ec4 05-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* The window would not reset the audio/video track to 0 on a new file if
the Controller would keep the last audio/video track index across files
(which would be nice for certain situations).
* Better error message for unsupported files, especially for the
B_MEDIA_NO_HANDLER error.
* In the Controller, try to obtain the track duration and ignore tracks that
return a bogus duration. I have some MP3 files on ZETA that are obviously
not handled correctly by the ZETA mp3 decoder. Previously, the player would
just sit there and appeared to have some other internal error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26261 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 585d5a26 26-Jun-2008 Stephan Aßmus <superstippi@gmx.de>

Removed a no longer used method.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0fc56ed5 30-May-2008 Stephan Aßmus <superstippi@gmx.de>

* Moved a bunch of non-primary interface classes into a new subfolder
"interface"

* Complete reimplementation of the playback engine using Media Nodes:
- Seeking video files does not appear to lockup the playback anymore, but
works on a frame accurate level even for keyframe based streams. There is
currently a problem with certain container formats, the audio track reports
a "Device Seek Error" in certain conditions. In that case audio goes silent,
and can be restarted by going back to the beginnings of the stream.
- Video overlays are now supported.
- It would be possible to connect the output of the MediaPlayer to other
applications or dormant media nodes.

* Known regressions:
- The volume slider has currently no effect anymore.
- Switching the audio track during playback has a known race condition and
can crash the player.
- The new engine is not as "light weight" as the old one. I tagged the
previous implementation in tags/components/mediaplayer-engine-v1. It does
not seem to have any noticable effect though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25725 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 540fe7ae 17-Oct-2007 Stephan Aßmus <superstippi@gmx.de>

patch by Fredrik Modéen with changes by myself
* toggle the "marked" state of the settings menu items correctly
* implement muting/unmuting the volume
* implement volume up/down triggered by keyboard events
* forward the skip next/previous events to the controller
(various kinds of keyboard navigation or mouse wheel)
* establish the notification link for volume and muted changes


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22594 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 56853d6f 17-Jun-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

Use separate waiting semaphores for audio and video, later to be used for seeking


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21442 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a72b9fe 05-Jun-2007 Stephan Aßmus <superstippi@gmx.de>

* re-enabled the InfoWin


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21335 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 09464bc9 03-Jun-2007 Stephan Aßmus <superstippi@gmx.de>

* extraced PlaylistListView into it's own files
* lots of changes, besically these make the Playlist window usable
- drag sorting works (hold shift to copy instead of move items)
- removing items with the delete key works
- dragging files/folders from Tracker works (hold shift to insert
them in the existing playlist, othewise the new files replace
the playlist)
* some refactoring and bug fixes in previously unused functionality
* Playlist can now be locked (needed to be), and is in ControllerView,
MainWin and PlaylistListView


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21305 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5fa5e5fe 29-May-2007 Stephan Aßmus <superstippi@gmx.de>

* added notification support to Playlist and Controller
* added AbstractLOAdapter by Ingo Weinhold which makes
notifications asynchronous
* removed "Player" interface/concept, replaced it by
the notification mechanism (window loads new file
when "current" ref index changes in Playlist)
* removed some cross classes dependencies
* the wind buttons are not displayed anymore for now
* lots of changes to the Controller
- the decoder/player threads are kept running for the
entire lifetime of the Controller object (in essence, makes
it possible to playback seamless)
- abstracted BMediaTrack usage into "Video-" and "AudioSupplier"
objects (the BMediaTrack pointers are only still there, because
I have not gotten around to fix the messy/hacky InfoWindow)
- reaching the end of the stream will trigger a notification,
so that the next file from the playlist is played
- fSoundOutput is managed by the Controller
- tried to make seeking seem more controlled (slider doesn't
jump back to previous position)
- playback position is correctly updated in GUI
- volume is maintained independend of SoundOutput so
that it can be transfered from one to the next output
- performance time is maintained correctly (?) even if
no audio stream is present
* work in progress Playlist window (drag sorting does not work yet!)
* rearranged menus a bit
* rearranged overlay code in the VideoView, but it cannot work
like it is currently designed, since the buffers need to be
switched all at once, which the video decoding thread
is not doing yet
* dragging files into the main window with shift held down
appends to the existing playlist
* dropping folders adds files recursively
* pressing space toggles playback (instead of changing some
settings of the GUI)
* fixed some more minor issues or unimplemented stuff in the UI


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21276 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c91fb637 01-Mar-2007 François Revol <revol@free.fr>

Add a File Info Window to MediaPlayer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20293 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 453f642e 22-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Rewrote audio decoding to provide timing information
that is used to sync with video.
Separated audio decoding and playing into two threads,
the same applies to video decoding and playback.
This was inspired from code written by Stephan.
Added video decoding and display, added play/pause/stop.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17533 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d38c8112 16-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

cache the track duration


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17483 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0f0bbc97 08-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented seeking and position update


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17378 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 131d97be 08-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Connected volume control GUI with Controller class, and made slider non-linear.
This should be reviewed, and a better algorith should be selected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17375 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e070a9e 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added a crude hack to play sound


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17360 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5dfe4fc7 07-May-2006 Axel Dörfler <axeld@pinc-software.de>

Build fix for Dano.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17359 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e49470a 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added starting/stopping of playback threads


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17358 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0aaf5eb1 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added a sound output class to push data to the mixer, also started audio and video play threads


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17357 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bcc46b4b 06-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented opening media files for real


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17350 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 73988372 25-Apr-2006 Axel Dörfler <axeld@pinc-software.de>

Fixed build under Dano.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17230 a95241bf-73f2-0310-859d-f6bbb57e9c96


# aadc5f57 24-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added playlist support


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17225 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e1d8d7d6 23-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented some file handling related functionality


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17211 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 04a91b97 05-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Imported source code from DVB TV application


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17021 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c8ccdf52032feea5e7853631dee57cf7f6302c5d 27-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Added basic support for SRT subtitle files. It only works
if the SRT file is placed alongside the current playlist
item under the same name (sans extension). The name of the
language is taken from the file which needs to be separated
by a dot (should be improved).
* Instead of the black outline, subtitles have a nice drop
shadow now, which is easier on the eyes somehow.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38827 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f70b711fe02a4aae30692678c1c7c143050bc849 18-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* 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


# 5bacae95fe04b9d957fad95ce76b1e3f8a63409e 17-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 8f0617aa0d39878dfbf872416eaab95cdcfa1742 10-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 0beac2ff048390fecd8a08a99e7dd2cd8a9724b4 09-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

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


# 818577b203870d5b3625514a99c35726f42cbde3 06-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Make PlaybackManager::CurrentFrame() return int64, like
what it's internally using. Adapt NotifyCurrentFrameChanged()
implementors.
* Controller::SetTo() does not need to set the current frame,
since either Init() or FormatChanged() will have taken care
of it now.
* Reset the seeking request info in Controller::SetTo().
* Changed the parameter passed to VideoSupplier::FillBuffer()
from media_format to media_raw_video_format, so the
VideoProducer doesn't have to generate a media_format for
each frame...
* ProxyVideoSupplier caches the last produced frame, which
avoids a situation that the VideoProducer asks to generate
the same frame twice sometimes.
* In PlaybackManager::_PushState(), make sure we really
schedule the next current_frame if asked. This avoids
one situation in which the VideoSupplier was asked to generate
the same frame again and fixes playback after pausing (was
showing black video until the next keyframe before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38553 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 80a9df25028391f54d026007bf633fe99e7529e1 01-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Show the controls in full-screen mode when the mouse moves.
* Propagate the current audio channel count to the controls.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38490 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e663610e84ed96e246aa7bb6d416bd51c1166447 18-Nov-2009 Stephan Aßmus <superstippi@gmx.de>

* Made opening playlist items asynchronous (in the Controller thread).
* Resolved TODO: Use the existing "FileChanged" notification in the main
window to adopt the UI to the currently playing item.
* When opening a file takes some time, the window is now free to start hidden
and setup a message runner to unhide it after 150 msecs.
* When launching MediaPlayer with files, the 150 msecs delay is used to
start the window hidden and pop up right at the correct location for audio.
If opening the first audio file takes less than 150 msecs, the window will
already show as soon as possible.
* While opening a file in the Controller, the window will say so in the
disabled seek slider instead of showing the message "Drop media files here.".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34132 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ab18a502299fa5a8d32768b07814836ef365380b 16-Nov-2009 Stephan Aßmus <superstippi@gmx.de>

* Moved the about alert handling into the application
* Simplified the handling of the first window and removed FirstWindow(),
we can tell by fPlayerCount.
* Both the above would fix a crash when requesting the about alert with the
first window already gone. Respectively another player instance opening
if fFirstWindow was reset to NULL after some recent revision.
* Implemented restoring the current playlist, index and position in the file.
* Devised a more robust way to solve asynchronous seeking. The Controller is
now notified that a seek request has been handled with a dedicated hook.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34079 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2caab6e574d52306baf93db9b830dadefbb08836 28-Oct-2009 Axel Dörfler <axeld@pinc-software.de>

* Coding style cleanups, no functional change.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33811 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a920a6e2a0be1fa0d4f199c03188bb37956e28b2 09-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Use media_format pixel_width/height_aspect as it was meant to be used. This
avoids rounding issues (1440x1080 -> 1920x1080 instead of 1921x1080).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31477 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1f3691df0fa0861206a72c7b3b9967cea8097692 28-Jun-2009 Stephan Aßmus <superstippi@gmx.de>

* In theory, we should support getting the video aspect from the current stream.
* Added "Force Aspect Ratio" to Video menu and context menu.
* Removed some code duplication in handling the video size messages.
* Added track selection sub-menus to the context menu, replacing the IMHO
not so important interface settings items.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31302 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c60fcc87e04b0af21ed9f01581b23d1f714a366f 23-May-2009 Stephan Aßmus <superstippi@gmx.de>

* Changed the PlaylistItem interface to be hopefully more flexible. It can
probably still be improved.
* Renamed EntryRefPlaylistItem to just FilePlaylistItem.
* Moved the "move into Trash" and "restore from Trash" implementation into
FilePlaylistItem. Also added what's needed to allow Tracker to restore the
entry itself.
* Refactored everything to make Playlist use PlaylistItems instead of
entry_refs and all that entails...
* The transition to virtualize PlaylistItems is not complete yet in the
Controller, since it still uses BMediaFile there. But it's much easier to
change that now.
* Objects which keep a PlaylistItem around do correct reference counting, but
some commands could be simplified if they were using references as well. It
still should work correctly, though, if I didn't miss anything. It should also
fix theoretical situations of encountering out-of-memory while messing with
the Playlist leading to inconsistent state between Undo/Redo and then leaking
items because of that.
* Added the discussed change that MediaPlayer checks it's own supported types
before rejecting a file by super type. (untested)
* When importing playlist items, the currently playling item is better
maintained during Undo/Redo.
* Some debugging code added in MediaTrackAudioSupplier, no functional changes.
* Fixed a number of coding style issues and automatic whitespace cleanup.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30834 a95241bf-73f2-0310-859d-f6bbb57e9c96


# de36f71531c4e6113032ae936ce696a62b033a27 05-Nov-2008 Stephan Aßmus <superstippi@gmx.de>

More or less applied patch by anxiety that implements showing a file
icon in the MediaPlayer Info window. I changed it a bit, so that the
icon retrieval only happens at the file change notification (quite
important, since the info window receives playback position notifications).
I also changed it to take the icon from the file first, if there is one.
Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28520 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7060b0a22017f17b586476e54c7b6235367f7a25 12-Oct-2008 Stephan Aßmus <superstippi@gmx.de>

Fix playback of playlists when "auto play files" is off. The playback stopped
after every new file of a playlist.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4ddc254c08b7f88229ba3741946b0925f3c8f805 26-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented decreasing the volume of inactive player windows according to
the global settings. This is only done though if there are multiple players
open at the time. (It doesn't consider their "playing" state, though.)
* The SettingsWindow is now maintained by the MainApp, and there is only a
single instance, those settings are application wide. Also used the
"application floating" window look&feel.
* Small code cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27210 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9a5f768b197711cd146280af23da99172053c2dc 26-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented the "Auto start playback", "Close when done playing movie" and
"Close when done playing sound" settings.
* Removed unused member variables from Controller
* Changed Playlist::SetCurrentRef() to indicate success and prevent the
current index from getting out of range.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27208 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 613ecaf5f9eb4aaf399917fb239979e5256fb274 22-Aug-2008 Stephan Aßmus <superstippi@gmx.de>

* Added the implementation behind the "Use overlays if available" and "Scale
videos smoothly in non-overlay mode" options.
* Disabled the other controls in the SettingsWindow which are not yet
implemented.
* Enable and disable Revert button according to settings state.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27157 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb91d0058dead0e6f8dc79cc531907fb31012b6b 14-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* Whether an audio and/or video node is used is now more explicit. The audio
node can now also be turned off for videos that don't have audio.
* The PlaybackManager currently has the "no audio" support added in a not
quite so nice way, will have to think about something, this is just quick
and dirty to get it going. There is just two places where the audio time
needs to be ignored, because it remains at zero.

-> Especially when using OSS, the seeking latency will be much reduced when
playing videos that have no sound.

* The Controller now maintains the frame it wanted to seek to and does not
forward "position changed" to other listeners as long as the seek frame
has not been reached. This fixes the slider jumping back to the old position
for a bit until jumping back to the seek frame. It also fixes another
problem when switching to the next file. Because the total duration is
already adopted while the old clip is still playing within the seek latency,
the current position jumped to the new relative position, while it is
still refering to the position within the old clip. So both seeking and
switching clips looks much smoother now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26415 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6ac2ec43e8d5c0215f33734b2bfbb1e69c138c8 05-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* The window would not reset the audio/video track to 0 on a new file if
the Controller would keep the last audio/video track index across files
(which would be nice for certain situations).
* Better error message for unsupported files, especially for the
B_MEDIA_NO_HANDLER error.
* In the Controller, try to obtain the track duration and ignore tracks that
return a bogus duration. I have some MP3 files on ZETA that are obviously
not handled correctly by the ZETA mp3 decoder. Previously, the player would
just sit there and appeared to have some other internal error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26261 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 585d5a26d395df802b7b451bd2376e4c5f2f4182 26-Jun-2008 Stephan Aßmus <superstippi@gmx.de>

Removed a no longer used method.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0fc56ed57bdd5d2d44f33edd17d94210704613bd 30-May-2008 Stephan Aßmus <superstippi@gmx.de>

* Moved a bunch of non-primary interface classes into a new subfolder
"interface"

* Complete reimplementation of the playback engine using Media Nodes:
- Seeking video files does not appear to lockup the playback anymore, but
works on a frame accurate level even for keyframe based streams. There is
currently a problem with certain container formats, the audio track reports
a "Device Seek Error" in certain conditions. In that case audio goes silent,
and can be restarted by going back to the beginnings of the stream.
- Video overlays are now supported.
- It would be possible to connect the output of the MediaPlayer to other
applications or dormant media nodes.

* Known regressions:
- The volume slider has currently no effect anymore.
- Switching the audio track during playback has a known race condition and
can crash the player.
- The new engine is not as "light weight" as the old one. I tagged the
previous implementation in tags/components/mediaplayer-engine-v1. It does
not seem to have any noticable effect though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25725 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 540fe7aef9f5fea126dbfb0be82b534744eea29c 17-Oct-2007 Stephan Aßmus <superstippi@gmx.de>

patch by Fredrik Modéen with changes by myself
* toggle the "marked" state of the settings menu items correctly
* implement muting/unmuting the volume
* implement volume up/down triggered by keyboard events
* forward the skip next/previous events to the controller
(various kinds of keyboard navigation or mouse wheel)
* establish the notification link for volume and muted changes


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22594 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 56853d6ff1450026338a591b30a85f1c9805520a 17-Jun-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

Use separate waiting semaphores for audio and video, later to be used for seeking


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21442 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a72b9fead28a8cb1cad04c7a8bb023adb41bea0 05-Jun-2007 Stephan Aßmus <superstippi@gmx.de>

* re-enabled the InfoWin


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21335 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 09464bc90b61f0c038cd92e3894921c64caedf9a 03-Jun-2007 Stephan Aßmus <superstippi@gmx.de>

* extraced PlaylistListView into it's own files
* lots of changes, besically these make the Playlist window usable
- drag sorting works (hold shift to copy instead of move items)
- removing items with the delete key works
- dragging files/folders from Tracker works (hold shift to insert
them in the existing playlist, othewise the new files replace
the playlist)
* some refactoring and bug fixes in previously unused functionality
* Playlist can now be locked (needed to be), and is in ControllerView,
MainWin and PlaylistListView


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21305 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5fa5e5fea7e2752ce0f9eb514b82f7c34ea308e6 29-May-2007 Stephan Aßmus <superstippi@gmx.de>

* added notification support to Playlist and Controller
* added AbstractLOAdapter by Ingo Weinhold which makes
notifications asynchronous
* removed "Player" interface/concept, replaced it by
the notification mechanism (window loads new file
when "current" ref index changes in Playlist)
* removed some cross classes dependencies
* the wind buttons are not displayed anymore for now
* lots of changes to the Controller
- the decoder/player threads are kept running for the
entire lifetime of the Controller object (in essence, makes
it possible to playback seamless)
- abstracted BMediaTrack usage into "Video-" and "AudioSupplier"
objects (the BMediaTrack pointers are only still there, because
I have not gotten around to fix the messy/hacky InfoWindow)
- reaching the end of the stream will trigger a notification,
so that the next file from the playlist is played
- fSoundOutput is managed by the Controller
- tried to make seeking seem more controlled (slider doesn't
jump back to previous position)
- playback position is correctly updated in GUI
- volume is maintained independend of SoundOutput so
that it can be transfered from one to the next output
- performance time is maintained correctly (?) even if
no audio stream is present
* work in progress Playlist window (drag sorting does not work yet!)
* rearranged menus a bit
* rearranged overlay code in the VideoView, but it cannot work
like it is currently designed, since the buffers need to be
switched all at once, which the video decoding thread
is not doing yet
* dragging files into the main window with shift held down
appends to the existing playlist
* dropping folders adds files recursively
* pressing space toggles playback (instead of changing some
settings of the GUI)
* fixed some more minor issues or unimplemented stuff in the UI


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21276 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c91fb637b62a85991908ff7349ca817dc35ab2f6 01-Mar-2007 François Revol <revol@free.fr>

Add a File Info Window to MediaPlayer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20293 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 453f642e2e5277aa60c17863fc25f38e23309aa8 22-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Rewrote audio decoding to provide timing information
that is used to sync with video.
Separated audio decoding and playing into two threads,
the same applies to video decoding and playback.
This was inspired from code written by Stephan.
Added video decoding and display, added play/pause/stop.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17533 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d38c8112a7fa3440f32d689cfc65c573ad399bb8 16-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

cache the track duration


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17483 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0f0bbc97511c62bb5537fa10a2815b7f1a4dd566 08-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented seeking and position update


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17378 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 131d97be807a1a3bd43c15d67ac6cef11f0b6398 08-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Connected volume control GUI with Controller class, and made slider non-linear.
This should be reviewed, and a better algorith should be selected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17375 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e070a9ee4f34e23cb07c19fef5458382bf7fcfc 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added a crude hack to play sound


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17360 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5dfe4fc749c03e71fdf4f67a521c9c6592a59e48 07-May-2006 Axel Dörfler <axeld@pinc-software.de>

Build fix for Dano.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17359 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e49470a24d0136e80b367891f0485c80d76bb7e 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added starting/stopping of playback threads


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17358 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0aaf5eb1ae99f9b0b78aa678191fde335f1fbc4e 07-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added a sound output class to push data to the mixer, also started audio and video play threads


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17357 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bcc46b4b9297b1a774f5b1333bbe9932d6df852b 06-May-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented opening media files for real


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17350 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 73988372cdd5d2766f6ba016b458af63baf1a060 25-Apr-2006 Axel Dörfler <axeld@pinc-software.de>

Fixed build under Dano.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17230 a95241bf-73f2-0310-859d-f6bbb57e9c96


# aadc5f572d7fa4e6d96e090ccb8087ddba45c27a 24-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

added playlist support


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17225 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e1d8d7d6b48c655bab349c1fde5200fed917289e 23-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

implemented some file handling related functionality


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17211 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 04a91b97bde1b41f4100b923a1699ddeac36635b 05-Apr-2006 Marcus Overhagen <marcusoverhagen@gmail.com>

Imported source code from DVB TV application


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17021 a95241bf-73f2-0310-859d-f6bbb57e9c96