[Player-cvs] app/gtk hxstatuspositionslider.cpp,1.22,1.22.2.1
sgarg at helixcommunity.org sgarg at helixcommunity.orgUpdate of /cvsroot/player/app/gtk
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv21359
Modified Files:
Tag: hxclient_3_1_0_atlas
hxstatuspositionslider.cpp
Log Message:
Porting RealPlayer to Atlas Linux
Index: hxstatuspositionslider.cpp
===================================================================
RCS file: /cvsroot/player/app/gtk/hxstatuspositionslider.cpp,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -d -r1.22 -r1.22.2.1
--- hxstatuspositionslider.cpp 6 Jul 2007 20:49:18 -0000 1.22
+++ hxstatuspositionslider.cpp 3 Jun 2008 12:03:27 -0000 1.22.2.1
@@ -213,6 +213,9 @@
UInt32 buffer_lower = 0;
UInt32 writePosition = 0;
UInt32 buffer_upper = 0;
+ UInt32 minBuffered = 0;
+ UInt32 maxSeekable = 0;
+ UInt32 maxBuffered = 0;
UInt32 maxPosition = 0;
HXStatusDisplayPositionSlider* position_status = HX_STATUS_DISPLAY_POSITION_SLIDER(user_data);
@@ -221,87 +224,85 @@
g_return_val_if_fail(position_status->position_scale != NULL, TRUE); // Don't remove the timeout callback.
+ superbuf_hscale = HX_SUPERBUF_HSCALE(position_status->position_scale);
+ g_return_val_if_fail(superbuf_hscale, TRUE); // Don't remove the timeout callback.
+ g_return_val_if_fail(!superbuf_hscale->grab_button, TRUE); // Don't remove the timeout callback.
+
if(status->player)
{
- pos = hx_basic_playback_get_position(status->player);
- len = hx_basic_playback_get_length(status->player);
-
// status->player is actually HXBasicPlayback interface, not HXPlayer.
HXPlayer* player = HX_PLAYER(status->player);
HXClientPlayerToken helix_client_token = hx_player_get_token(player);
g_return_val_if_fail(helix_client_token, TRUE); // Don't remove the timeout callback.
- superbuf_ui_mode = ClientPlayerGetSuperBufferRange(helix_client_token,
- &minPosition,
- &writePosition,
- &maxPosition);
-
- superbuf_hscale = HX_SUPERBUF_HSCALE(position_status->position_scale);
- g_return_val_if_fail(superbuf_hscale, TRUE); // Don't remove the timeout callback.
-
- if (superbuf_ui_mode)
- {
gboolean is_live_or_infinite;
+ pos = hx_basic_playback_get_position(status->player);
is_live_or_infinite = hx_basic_playback_is_live(status->player) ||
hx_basic_playback_is_infinite_duration(status->player);
+ gboolean is_superb_enabled = ClientPlayerIsSuperBufferEnabled(helix_client_token);
+ if (is_superb_enabled)
+ {
+ superbuf_ui_mode = ClientPlayerGetSuperbufferTimelineInfo(helix_client_token,
+ &minPosition,
+ &minBuffered,
+ &maxSeekable,
+ &maxBuffered,
+ &maxPosition);
if (is_live_or_infinite)
{
- superbuf_hscale->buffer_mode = BUFFER_MODE_LIVE;
- buffer_lower = minPosition;
- buffer_upper = writePosition;
-
- if (writePosition == maxPosition)
+ superbuf_hscale->buffer_mode = HX_SUPERB_MODE_LIVE;
+ superbuf_hscale->restrict_seek_in_buffered = TRUE;
+ if (maxBuffered == maxPosition)
{
- // Add here; subtract in superbufhscale.c
+ // Add live bg move here; subtract in superbufhscale.c
superbuf_hscale->live_background_moved += (guint32)
- MAX( (minPosition - GTK_RANGE(superbuf_hscale)->adjustment->lower), 0);
+ MAX( (minPosition - superbuf_hscale->adjustment->lower), 0);
hx_superbuf_start_animation(superbuf_hscale);
}
}
- else // OnDemand
+ else
{
- superbuf_hscale->buffer_mode = BUFFER_MODE_ONDEMAND;
- buffer_lower = minPosition;
- buffer_upper = writePosition;
+ // Superbuffer enabled and not live == OnDemand.
+ superbuf_hscale->buffer_mode = HX_SUPERB_MODE_ONDEMAND;
+ superbuf_hscale->restrict_seek_in_buffered = FALSE;
superbuf_hscale->live_background_moved = 0;
hx_superbuf_stop_animation(superbuf_hscale);
}
- if (!minPosition && !pos && !maxPosition)
- {
- return TRUE; // don't remove
- }
+ hx_superbuf_hscale_set(superbuf_hscale,
+ pos, // value
+ minPosition, // lower
+ maxPosition, // upper
+ minBuffered, // buffer_min
+ maxSeekable, // buffer_max
+ is_live_or_infinite); // restrict_seek_in_buffered
- if (minPosition > pos)
- {
- g_warning("Superbuffer minPosition (%u) > pos (%u)", (guint)minPosition, pos);
}
- if (pos > maxPosition)
+ else if (is_live_or_infinite)
{
- g_warning("Superbuffer pos (%u) > maxPosition(%u)", pos, (guint)maxPosition);
+ // Superbuffer disabled and live.
+ superbuf_hscale->buffer_mode = HX_SUPERB_MODE_NON_SUPERB;
+ superbuf_hscale->live_background_moved = 0;
+ hx_superbuf_stop_animation(superbuf_hscale);
}
-
- gtk_range_set_range(GTK_RANGE(position_status->position_scale), (gdouble)minPosition, (gdouble)maxPosition);
- gtk_range_set_value(GTK_RANGE(position_status->position_scale), (gdouble)pos);
-
- superbuf_hscale->buffer_lower = (gdouble)minPosition;
- superbuf_hscale->buffer_upper = (gdouble)writePosition;
- }
- else if(len > 0)
+ else
{
// Also non-superbuffer case.
- superbuf_hscale->buffer_lower = 0.0;
- superbuf_hscale->buffer_upper = 0.0;
- superbuf_hscale->buffer_mode = BUFFER_MODE_NON_SUPERBUFFERED;
- gtk_range_set_range(GTK_RANGE(position_status->position_scale), 0, (gdouble)len);
- gtk_range_set_value(GTK_RANGE(position_status->position_scale), (gdouble)pos);
+ len = hx_basic_playback_get_length(status->player);
+ superbuf_hscale->buffer_mode = HX_SUPERB_MODE_NON_SUPERB;
superbuf_hscale->live_background_moved = 0;
hx_superbuf_stop_animation(superbuf_hscale);
+ hx_superbuf_hscale_set(superbuf_hscale,
+ pos, // value
+ 0.0, // lower
+ len, // upper
+ 0.0, // buffer_min
+ 0.0, // buffer_max
+ FALSE); // restrict_seek_in_buffered
}
- gtk_widget_queue_draw(GTK_WIDGET(superbuf_hscale));
}
return TRUE; // don't remove