Framwork (opencore) has control to handle end of playback case. Moving to IDLE is preferred as there can be a REWIND after receiving EOS. Moving to LOADED would require more work to go back to executing. I think moving IDLE is sufficient for end of playback scenario.
For Pause during playback case: there is probably nothing much framwork can do. how does android framwork enforce apps to release resources? Is it possible to force all apps to get a default idle screen timeout handler which will call release()? On Feb 8, 7:07 pm, Freepine <[email protected]> wrote: > Yes, if only from the power saving perspective, we can even put omx in IDLE > or LOADED state not only after EOS, but also when user pauses playback:) I > just think it's not worthy because app developers is supposed to release > player after usage:) > > > > On Mon, Feb 9, 2009 at 11:00 AM, hdandroid <[email protected]> wrote: > > > HW continues to cosume power from the time the component is put to > > PAUSE to the time finalize() is called. This duration could be > > significant and result in unnecessary power consumption. (if you are > > lukcy the app might get killed - otherwise HW continues to consume > > power) > > > Even if the component is moved to OMX IDLE state, user interface can > > show that player is PAUSED. There is no change in UI behavior with > > this approach. > > > On Feb 8, 6:33 pm, Freepine <[email protected]> wrote: > > > I think Ravi has made a good point and as far as I know staying in PAUSED > > > state after EOS is a common practice for various players. > > > > As a well-educated programmer, I don't think releasing acquired resources > > > after its usage is that difficult:) And even you don't call release() > > > manually, mediaplayer class's finalize() will be called eventually when > > it's > > > garbage collected and release the player. > > > > I guess the main concern we have is that it lacks of robustness for not > > > well-written applications, especially considering the reality of that > > > applications might get randomly killed due to memory shortage. I did a > > > simply test to kill the test app while playback is ongoing and found that > > > music stopped immediately. So it seems binder driver did a good job to > > > decrease the reference count of player object when client app is killed. > > > -Freepine > > > > On Mon, Feb 9, 2009 at 4:57 AM, hdandroid <[email protected]> wrote: > > > > > Let's take 3 types of components > > > > > 1) Component must be moved to LOADED state for power savings - A > > > > 2) Component can achieve power savings when moved to IDLE or LOADED > > > > state - B > > > > 3) Component cannot achieve power savings in any state - C > > > > > Component A requires a well written App to call release() upon screen > > > > timeout. > > > > With a well writeen app, both component A and component B can benefit. > > > > There is nothing much we can do for component C in any case. > > > > With a not well written app (which does not call release()), platform > > > > can help take advantage of capabilities of component B. > > > > > Question is can the platform framework help very well written > > > > component B when it is driven by not so well writeen App. > > > > > Right now my component is see as the culprit as the platform continues > > > > to consume power even when > > > > playback has ended. The bad one here is really the app which was not > > > > well written to call release() > > > > upon idle screen timeout.I can save upto siginificant amount of power > > > > (in the range of 50 -100mA depending > > > > on the component). > > > > > Startup latencies are not significantly variable. If a compoent > > > > impementation strictly adheres to the specs recommendation, state > > > > transitions should complete within a short amount of time (20ms > > > > recommended by the spec when transition invloves buffer exchange - Sec > > > > 3.2 of OMX IL 1.1.2). > > > > > I don't think we are violating hardware abstraction here. Implicitly, > > > > it is better to build the platform to help well written component B do > > > > its best. Whether an IL client moves the component to IDLE or PAUSE > > > > should not matter much if the component implementation is compliant > > > > with the spec. Component A and C should continue to function even if > > > > IL client moves them to IDLE instead of PAUSE. State transition delays > > > > will be in the order of few milliseconds not noticable (I don't think > > > > there is noticable delay in skipping from end of one song to the next > > > > song with PV SW codecs on G1 - In this case, framwork is doing a > > > > complete unload and reload of of potentially the same component) > > > > > Sending codec config upon reinitalizing (idle to executing > > > > transition): > > > > This is not needed for all types of media formats (for example for AAC > > > > ADTS and MP3). > > > > Formats which need this would use OMX_BUFFERFLAG_CODECCONFIG to signal > > > > config data. > > > > This is an implementation issue in IL client and OMX component. This > > > > is not an issue if both are spec compliant. > > > > My component would anyway cache configuration data the first time it > > > > is provided. If IL client does not provide it at the time of idle- > > > > >executing transition, it would reuse the configuration information > > > > provided at the very beginning. i.e., it would assume that there is no > > > > configuration change. At this time I am playing with an MP3 component > > > > which does not really require reconfiguration. > > > > > Sec 3.2 > > > > The standards body identified the 20-millisecond timeout to be a > > > > reasonable > > > > response time for commands that may require buffer processing to be > > > > completed; > > > > the assumption here is that the longest buffer processing would be > > > > less than > > > > 30 milliseconds, which corresponds to 30-frames per second video. > > > > > Sec 2.1.4 > > > > EXECUTING enables buffer processing to resume where the component left > > > > off. > > > > Transitioning from EXECUTING or PAUSED to IDLE will cause the context > > > > in which > > > > buffers were processed to be lost, which requires the start of a > > > > stream to be > > > > reintroduced. Transitioning from IDLE to LOADED will cause operational > > > > resources > > > > such as communication buffers to be lost. > > > > > On Feb 8, 11:26 am, GregS <[email protected]> wrote: > > > > > Efficient power consumption is definitely worth pursuing. > > > > > Unfortunately, to my knowledge, the OpenMAX IL spec does not give any > > > > > guidelines on the expected power consumption in different states. > > > > > Therefore there may be some OpenMAX components that might even need > > to > > > > > be unloaded before there is any power consumption savings, others may > > > > > have saving when driven to idle, or maybe for some it doesn't matter > > > > > what state they are in (i.e., no power savings). Remember we're > > > > > trying to create something that works across many different hardware > > > > > platforms with different OpenMAX component implementations. Using > > > > > similar logic to what you describe, it could be argued that the > > > > > OpenMAX component implementation itself should handle the issues of > > > > > power efficiency when paused rather than requiring every OpenMAX IL > > > > > client that is interfacing with it to know the details of the power > > > > > consumption in different modes as well the start-up latencies so > > > > > proper tradeoffs could be made. The point of the OpenMAX IL > > interface > > > > > is to abstract hardware details. > > > > > > Of course all of this is a purely abstract discussion so far and I > > > > > realize we have to deal with non-ideal implementations. So in order > > > > > to assess the tradeoffs of changing the logic, it would be helpful to > > > > > understand if you have specific OpenMAX implementations of concern. > > > > > If so can you provide numbers on the power consumption of different > > > > > states? Part of the challenge of transitioning the component to the > > > > > idle state is that the codec configuration data would need to be > > > > > cached (not done today) so it could be used to reinitialize the state > > > > > of the OpenMAX component. In pause state the component keeps all the > > > > > configuration and state information so it isn't necessary to resend > > it > > > > > when starting playback again somewhere in the same clip. > > > > > > On Feb 6, 8:54 am, hdandroid <[email protected]> wrote: > > > > > > > You would expect a well written app to issue release(). There is no > > > > > > way to enforce this on all apps that run on the platform. > > > > > > There will always be an app that is not well written which would > > not > > > > > > call release(). > > > > > > > From a platform perspective, android platform can allow lower power > > > > > > consumption with both types of apps. This would require Opencore to > > > > > > move the component to Idle or loaded state at the end of playaback. > > I > > > > > > agree that this would result in additional buffer exchange as you > > > > > > mentioned. It is really small amount of work and it does not result > > in > > > > > > noticable delays and it is not perceivable by human ears (while > > > > > > playing the same clip again, user would experience the same delay > > that > > > > > > would result when he/she moves to the next song - this change is > > not > > > > > > perceivable) > > > > > > > Another case is music player app is put to background in PAUSE > > state > > > > > > (at the end of playback) and HW continues to consume power. In this > > > > > > case, well written app would call release() before going to > > > > > > background. Some apps (not well written) apps may not perform this > > > > > > operation. > > > > > > > I suggest that Opencore make this change (move to IDLE or LOADED at > > > > > > the end of playback) allowing underlying OMX Codecs to stay power > > > > > > friendly. This would allow the Android platform to stay power > > friendly > > > > > > for both types of Apps (well written and not well written ones) > > > > > > > On Feb 5, 10:55 pm, rktb <[email protected]> wrote: > > > > > > > > I see what you are referring to. But, I think moving the > > component to > > > > > > > PAUSE state might be preferable. > > > > > > > > First of all, where does this "Pause" come from? The > > PVPlayerEngine, > > > > > > > at the end of a playback of content, drives the engine to a > > Paused > > > > > > > state. This reduces the start up time if a same clip is being > > ... > > read more »- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "android-framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-framework?hl=en -~----------~----~----~----~------~----~------~--~---
