Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
57766ff3
Commit
57766ff3
authored
Sep 26, 2010
by
Ilkka Ollakka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor rate(,-faster,-slower) to playlist
Thisway we don't reset playback rate between items
parent
00e9a165
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
105 additions
and
83 deletions
+105
-83
NEWS
NEWS
+3
-0
include/vlc_input.h
include/vlc_input.h
+1
-1
include/vlc_playlist.h
include/vlc_playlist.h
+2
-0
modules/control/gestures.c
modules/control/gestures.c
+2
-12
modules/control/hotkeys.c
modules/control/hotkeys.c
+4
-4
modules/control/rc.c
modules/control/rc.c
+3
-3
modules/gui/qt4/input_manager.cpp
modules/gui/qt4/input_manager.cpp
+5
-9
src/input/var.c
src/input/var.c
+1
-54
src/playlist/engine.c
src/playlist/engine.c
+84
-0
No files found.
NEWS
View file @
57766ff3
...
...
@@ -19,6 +19,9 @@ Codecs
* You can now use ffmpeg-mt in conjunction with vlc
* Important fixes for RealVideo 3.0 and 4.0 playback
Core:
* Playback rate doesn't get resetted to 1 between items anymore
Demuxers:
* id3tag plugin is removed (superseded by taglib).
* Ogg seeking improvements
...
...
include/vlc_input.h
View file @
57766ff3
...
...
@@ -310,7 +310,7 @@ struct input_thread_t
*
* The read-write variables are:
* - state (\see input_state_e)
* - rate
, rate-slower, rate-faster
* - rate
* - position, position-offset
* - time, time-offset
* - title, next-title, prev-title
...
...
include/vlc_playlist.h
View file @
57766ff3
...
...
@@ -113,6 +113,8 @@ TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t)
* node. It will contain a pointer to the input_item_t bound to the transformed
* playlist item.
*
* The playlist contains rate-variable which is propagated to current input if available
* also rate-slower/rate-faster is in use
*
* XXX Be really carefull, playlist_item_t->i_id and input_item_t->i_id are not
* the same. Yes, the situation is pretty bad.
...
...
modules/control/gestures.c
View file @
57766ff3
...
...
@@ -238,22 +238,12 @@ static void RunIntf( intf_thread_t *p_intf )
case
GESTURE
(
LEFT
,
UP
,
NONE
,
NONE
):
msg_Dbg
(
p_intf
,
"Going slower."
);
p_input
=
playlist_CurrentInput
(
p_playlist
);
if
(
p_input
)
{
var_TriggerCallback
(
p_input
,
"rate-slower"
);
vlc_object_release
(
p_input
);
}
var_TriggerCallback
(
p_playlist
,
"rate-slower"
);
break
;
case
GESTURE
(
RIGHT
,
UP
,
NONE
,
NONE
):
msg_Dbg
(
p_intf
,
"Going faster."
);
p_input
=
playlist_CurrentInput
(
p_playlist
);
if
(
p_input
)
{
var_TriggerCallback
(
p_input
,
"rate-faster"
);
vlc_object_release
(
p_input
);
}
var_TriggerCallback
(
p_playlist
,
"rate-faster"
);
break
;
case
GESTURE
(
LEFT
,
RIGHT
,
NONE
,
NONE
):
...
...
modules/control/hotkeys.c
View file @
57766ff3
...
...
@@ -713,18 +713,18 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
}
else
if
(
i_action
==
ACTIONID_RATE_NORMAL
)
{
var_SetFloat
(
p_
inpu
t
,
"rate"
,
1
.
);
var_SetFloat
(
p_
playlis
t
,
"rate"
,
1
.
);
DisplayMessage
(
p_vout
,
SPU_DEFAULT_CHANNEL
,
"%s"
,
_
(
"1.00x"
)
);
}
else
if
(
i_action
==
ACTIONID_FASTER
)
{
var_TriggerCallback
(
p_
inpu
t
,
"rate-faster"
);
var_TriggerCallback
(
p_
playlis
t
,
"rate-faster"
);
DisplayRate
(
p_vout
,
var_GetFloat
(
p_input
,
"rate"
)
);
}
else
if
(
i_action
==
ACTIONID_SLOWER
)
{
var_TriggerCallback
(
p_
inpu
t
,
"rate-slower"
);
var_TriggerCallback
(
p_
playlis
t
,
"rate-slower"
);
DisplayRate
(
p_vout
,
var_GetFloat
(
p_input
,
"rate"
)
);
}
else
if
(
i_action
==
ACTIONID_RATE_FASTER_FINE
||
...
...
@@ -733,7 +733,7 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
const
int
i_dir
=
i_action
==
ACTIONID_RATE_FASTER_FINE
?
1
:
-
1
;
float
f_newrate
=
AdjustRateFine
(
p_input
,
i_dir
);
var_SetFloat
(
p_
inpu
t
,
"rate"
,
f_newrate
);
var_SetFloat
(
p_
playlis
t
,
"rate"
,
f_newrate
);
DisplayRate
(
p_vout
,
f_newrate
);
}
else
if
(
i_action
==
ACTIONID_POSITION
)
...
...
modules/control/rc.c
View file @
57766ff3
...
...
@@ -1066,17 +1066,17 @@ static int Input( vlc_object_t *p_this, char const *psz_cmd,
}
else
if
(
!
strcmp
(
psz_cmd
,
"faster"
)
)
{
var_TriggerCallback
(
p_in
pu
t
,
"rate-faster"
);
var_TriggerCallback
(
p_in
tf
->
p_sys
->
p_playlis
t
,
"rate-faster"
);
i_error
=
VLC_SUCCESS
;
}
else
if
(
!
strcmp
(
psz_cmd
,
"slower"
)
)
{
var_TriggerCallback
(
p_in
pu
t
,
"rate-slower"
);
var_TriggerCallback
(
p_in
tf
->
p_sys
->
p_playlis
t
,
"rate-slower"
);
i_error
=
VLC_SUCCESS
;
}
else
if
(
!
strcmp
(
psz_cmd
,
"normal"
)
)
{
var_SetFloat
(
p_in
pu
t
,
"rate"
,
1
.
);
var_SetFloat
(
p_in
tf
->
p_sys
->
p_playlis
t
,
"rate"
,
1
.
);
i_error
=
VLC_SUCCESS
;
}
else
if
(
!
strcmp
(
psz_cmd
,
"frame"
)
)
...
...
modules/gui/qt4/input_manager.cpp
View file @
57766ff3
...
...
@@ -828,14 +828,12 @@ void InputManager::reverse()
void
InputManager
::
slower
()
{
if
(
hasInput
()
)
var_TriggerCallback
(
p_input
,
"rate-slower"
);
var_TriggerCallback
(
THEPL
,
"rate-slower"
);
}
void
InputManager
::
faster
()
{
if
(
hasInput
()
)
var_TriggerCallback
(
p_input
,
"rate-faster"
);
var_TriggerCallback
(
THEPL
,
"rate-faster"
);
}
void
InputManager
::
littlefaster
()
...
...
@@ -850,15 +848,13 @@ void InputManager::littleslower()
void
InputManager
::
normalRate
()
{
if
(
hasInput
()
)
var_SetFloat
(
p_input
,
"rate"
,
1.
);
var_SetFloat
(
THEPL
,
"rate"
,
1.
);
}
void
InputManager
::
setRate
(
int
new_rate
)
{
if
(
hasInput
()
)
var_SetFloat
(
p_input
,
"rate"
,
(
float
)
INPUT_RATE_DEFAULT
/
(
float
)
new_rate
);
var_SetFloat
(
THEPL
,
"rate"
,
(
float
)
INPUT_RATE_DEFAULT
/
(
float
)
new_rate
);
}
void
InputManager
::
jumpFwd
()
...
...
src/input/var.c
View file @
57766ff3
...
...
@@ -43,8 +43,6 @@ static int StateCallback ( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
);
static
int
RateCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
);
static
int
RateOffsetCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
);
static
int
PositionCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
);
static
int
TimeCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
...
...
@@ -90,8 +88,6 @@ static const vlc_input_callback_t p_input_callbacks[] =
{
CALLBACK
(
"state"
,
StateCallback
),
CALLBACK
(
"rate"
,
RateCallback
),
CALLBACK
(
"rate-slower"
,
RateOffsetCallback
),
CALLBACK
(
"rate-faster"
,
RateOffsetCallback
),
CALLBACK
(
"position"
,
PositionCallback
),
CALLBACK
(
"position-offset"
,
PositionCallback
),
CALLBACK
(
"time"
,
TimeCallback
),
...
...
@@ -140,14 +136,10 @@ void input_ControlVarInit ( input_thread_t *p_input )
var_Change
(
p_input
,
"state"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
/* Rate */
var_Create
(
p_input
,
"rate"
,
VLC_VAR_FLOAT
);
var_Create
(
p_input
,
"rate"
,
VLC_VAR_FLOAT
|
VLC_VAR_DOINHERIT
);
val
.
f_float
=
(
float
)
INPUT_RATE_DEFAULT
/
(
float
)
p_input
->
p
->
i_rate
;
var_Change
(
p_input
,
"rate"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
var_Create
(
p_input
,
"rate-slower"
,
VLC_VAR_VOID
);
var_Create
(
p_input
,
"rate-faster"
,
VLC_VAR_VOID
);
var_Create
(
p_input
,
"frame-next"
,
VLC_VAR_VOID
);
/* Position */
...
...
@@ -584,51 +576,6 @@ static int RateCallback( vlc_object_t *p_this, char const *psz_cmd,
return
VLC_SUCCESS
;
}
static
int
RateOffsetCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
VLC_UNUSED
(
newval
);
static
const
float
pf_rate
[]
=
{
1
.
0
/
64
,
1
.
0
/
32
,
1
.
0
/
16
,
1
.
0
/
8
,
1
.
0
/
4
,
1
.
0
/
3
,
1
.
0
/
2
,
2
.
0
/
3
,
1
.
0
/
1
,
3
.
0
/
2
,
2
.
0
/
1
,
3
.
0
/
1
,
4
.
0
/
1
,
8
.
0
/
1
,
16
.
0
/
1
,
32
.
0
/
1
,
64
.
0
/
1
,
};
const
unsigned
i_rate_count
=
sizeof
(
pf_rate
)
/
sizeof
(
*
pf_rate
);
const
float
f_rate
=
var_GetFloat
(
p_input
,
"rate"
);
/* Determine the factor closest to the current rate */
float
f_error
;
int
i_idx
;
for
(
unsigned
i
=
0
;
i
<
i_rate_count
;
i
++
)
{
const
float
f_test_e
=
fabs
(
fabs
(
f_rate
)
-
pf_rate
[
i
]
);
if
(
i
==
0
||
f_test_e
<
f_error
)
{
i_idx
=
i
;
f_error
=
f_test_e
;
}
}
assert
(
i_idx
<
(
int
)
i_rate_count
);
/* */
i_idx
+=
strcmp
(
psz_cmd
,
"rate-faster"
)
==
0
?
1
:
-
1
;
if
(
i_idx
>=
0
&&
i_idx
<
(
int
)
i_rate_count
)
{
const
float
f_rate_min
=
(
float
)
INPUT_RATE_DEFAULT
/
INPUT_RATE_MAX
;
const
float
f_rate_max
=
(
float
)
INPUT_RATE_DEFAULT
/
INPUT_RATE_MIN
;
const
float
f_sign
=
f_rate
>=
0
?
+
1
.
:
-
1
.;
var_SetFloat
(
p_input
,
"rate"
,
f_sign
*
__MAX
(
__MIN
(
pf_rate
[
i_idx
],
f_rate_max
),
f_rate_min
)
);
}
return
VLC_SUCCESS
;
}
static
int
PositionCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
...
...
src/playlist/engine.c
View file @
57766ff3
...
...
@@ -33,6 +33,7 @@
#include <vlc_interface.h>
#include "playlist_internal.h"
#include "stream_output/stream_output.h"
/* sout_DeleteInstance */
#include <math.h>
/* for fabs() */
/*****************************************************************************
* Local prototypes
...
...
@@ -54,6 +55,82 @@ static int RandomCallback( vlc_object_t *p_this, char const *psz_cmd,
return
VLC_SUCCESS
;
}
static
int
RateCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p
)
{
(
void
)
psz_cmd
;
(
void
)
oldval
;(
void
)
p
;
playlist_t
*
p_playlist
=
(
playlist_t
*
)
p_this
;
PL_LOCK
;
if
(
pl_priv
(
p_playlist
)
->
p_input
==
NULL
)
{
PL_UNLOCK
;
return
VLC_SUCCESS
;
}
var_SetFloat
(
pl_priv
(
p_playlist
)
->
p_input
,
"rate"
,
newval
.
f_float
);
PL_UNLOCK
;
return
VLC_SUCCESS
;
}
static
int
RateOffsetCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
playlist_t
*
p_playlist
=
(
playlist_t
*
)
p_this
;
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
VLC_UNUSED
(
newval
);
static
const
float
pf_rate
[]
=
{
1
.
0
/
64
,
1
.
0
/
32
,
1
.
0
/
16
,
1
.
0
/
8
,
1
.
0
/
4
,
1
.
0
/
3
,
1
.
0
/
2
,
2
.
0
/
3
,
1
.
0
/
1
,
3
.
0
/
2
,
2
.
0
/
1
,
3
.
0
/
1
,
4
.
0
/
1
,
8
.
0
/
1
,
16
.
0
/
1
,
32
.
0
/
1
,
64
.
0
/
1
,
};
const
unsigned
i_rate_count
=
sizeof
(
pf_rate
)
/
sizeof
(
*
pf_rate
);
PL_LOCK
;
float
f_rate
=
1
.;
if
(
pl_priv
(
p_playlist
)
->
p_input
)
{
f_rate
=
var_GetFloat
(
pl_priv
(
p_playlist
)
->
p_input
,
"rate"
);
}
else
{
f_rate
=
var_GetFloat
(
p_playlist
,
"rate"
);
}
PL_UNLOCK
;
/* Determine the factor closest to the current rate */
float
f_error
;
int
i_idx
;
for
(
unsigned
i
=
0
;
i
<
i_rate_count
;
i
++
)
{
const
float
f_test_e
=
fabs
(
fabs
(
f_rate
)
-
pf_rate
[
i
]
);
if
(
i
==
0
||
f_test_e
<
f_error
)
{
i_idx
=
i
;
f_error
=
f_test_e
;
}
}
assert
(
i_idx
<
(
int
)
i_rate_count
);
/* */
i_idx
+=
strcmp
(
psz_cmd
,
"rate-faster"
)
==
0
?
1
:
-
1
;
if
(
i_idx
>=
0
&&
i_idx
<
(
int
)
i_rate_count
)
{
const
float
f_rate_min
=
(
float
)
INPUT_RATE_DEFAULT
/
INPUT_RATE_MAX
;
const
float
f_rate_max
=
(
float
)
INPUT_RATE_DEFAULT
/
INPUT_RATE_MIN
;
const
float
f_sign
=
f_rate
>=
0
?
+
1
.
:
-
1
.;
var_SetFloat
(
p_playlist
,
"rate"
,
f_sign
*
__MAX
(
__MIN
(
pf_rate
[
i_idx
],
f_rate_max
),
f_rate_min
)
);
}
return
VLC_SUCCESS
;
}
/**
* Create playlist
*
...
...
@@ -315,6 +392,13 @@ static void VariablesInit( playlist_t *p_playlist )
var_Create
(
p_playlist
,
"repeat"
,
VLC_VAR_BOOL
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_playlist
,
"loop"
,
VLC_VAR_BOOL
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_playlist
,
"rate"
,
VLC_VAR_FLOAT
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_playlist
,
"rate-slower"
,
VLC_VAR_VOID
);
var_Create
(
p_playlist
,
"rate-faster"
,
VLC_VAR_VOID
);
var_AddCallback
(
p_playlist
,
"rate"
,
RateCallback
,
NULL
);
var_AddCallback
(
p_playlist
,
"rate-slower"
,
RateOffsetCallback
,
NULL
);
var_AddCallback
(
p_playlist
,
"rate-faster"
,
RateOffsetCallback
,
NULL
);
var_AddCallback
(
p_playlist
,
"random"
,
RandomCallback
,
NULL
);
/* */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment