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
e365f860
Commit
e365f860
authored
Sep 03, 2012
by
Felix Paul Kühne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
qtcapture: unify and modernize coding style
parent
bdb729ea
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
94 additions
and
112 deletions
+94
-112
modules/access/qtcapture.m
modules/access/qtcapture.m
+94
-112
No files found.
modules/access/qtcapture.m
View file @
e365f860
...
...
@@ -48,22 +48,22 @@
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
);
static
void
Close
(
vlc_object_t
*
p_this
);
static
int
Demux
(
demux_t
*
p_demux
);
static
int
Control
(
demux_t
*
,
int
,
va_list
);
static
int
Open
(
vlc_object_t
*
p_this
);
static
void
Close
(
vlc_object_t
*
p_this
);
static
int
Demux
(
demux_t
*
p_demux
);
static
int
Control
(
demux_t
*
,
int
,
va_list
);
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin
()
set_shortname
(
N_
(
"Quicktime Capture"
)
)
set_description
(
N_
(
"Quicktime Capture"
)
)
set_category
(
CAT_INPUT
)
set_subcategory
(
SUBCAT_INPUT_ACCESS
)
add_shortcut
(
"qtcapture"
)
set_capability
(
"access_demux"
,
10
)
set_callbacks
(
Open
,
Close
)
set_shortname
(
N_
(
"Quicktime Capture"
)
)
set_description
(
N_
(
"Quicktime Capture"
)
)
set_category
(
CAT_INPUT
)
set_subcategory
(
SUBCAT_INPUT_ACCESS
)
add_shortcut
(
"qtcapture"
)
set_capability
(
"access_demux"
,
10
)
set_callbacks
(
Open
,
Close
)
add_integer
(
"qtcapture-width"
,
640
,
QTKIT_WIDTH_TEXT
,
QTKIT_WIDTH_LONGTEXT
,
true
)
change_integer_range
(
80
,
1280
)
add_integer
(
"qtcapture-height"
,
480
,
QTKIT_HEIGHT_TEXT
,
QTKIT_HEIGHT_LONGTEXT
,
true
)
...
...
@@ -88,10 +88,10 @@ vlc_module_end ()
/* Apple sample code */
@implementation
VLCDecompressedVideoOutput
:
QTCaptureDecompressedVideoOutput
-
(
id
)
init
{
if
(
self
=
[
super
init
]
)
{
if
(
self
=
[
super
init
])
{
currentImageBuffer
=
nil
;
currentPts
=
0
;
previousPts
=
0
;
...
...
@@ -99,10 +99,10 @@ vlc_module_end ()
}
return
self
;
}
-
(
void
)
dealloc
{
@synchronized
(
self
)
{
@synchronized
(
self
)
{
CVBufferRelease
(
currentImageBuffer
);
currentImageBuffer
=
nil
;
}
...
...
@@ -122,8 +122,7 @@ vlc_module_end ()
CVBufferRetain
(
videoFrame
);
@synchronized
(
self
)
{
@synchronized
(
self
)
{
imageBufferToRelease
=
currentImageBuffer
;
currentImageBuffer
=
videoFrame
;
QTTime
timeStamp
=
[
sampleBuffer
presentationTime
];
...
...
@@ -132,7 +131,7 @@ vlc_module_end ()
/* Try to use hosttime of the sample if available, because iSight Pts seems broken */
NSNumber
*
hosttime
=
(
NSNumber
*
)[
sampleBuffer
attributeForKey
:
QTSampleBufferHostTimeAttribute
];
if
(
hosttime
)
currentPts
=
(
mtime_t
)
AudioConvertHostTimeToNanos
([
hosttime
unsignedLongLongValue
])
/
1000
;
if
(
hosttime
)
currentPts
=
(
mtime_t
)
AudioConvertHostTimeToNanos
([
hosttime
unsignedLongLongValue
])
/
1000
;
}
CVBufferRelease
(
imageBufferToRelease
);
}
...
...
@@ -144,25 +143,24 @@ vlc_module_end ()
void
*
pixels
;
if
(
!
currentImageBuffer
||
currentPts
==
previousPts
)
if
(
!
currentImageBuffer
||
currentPts
==
previousPts
)
return
0
;
@synchronized
(
self
)
{
@synchronized
(
self
)
{
imageBuffer
=
CVBufferRetain
(
currentImageBuffer
);
if
(
imageBuffer
)
{
if
(
imageBuffer
)
{
pts
=
previousPts
=
currentPts
;
CVPixelBufferLockBaseAddress
(
imageBuffer
,
0
);
pixels
=
CVPixelBufferGetBaseAddress
(
imageBuffer
);
if
(
pixels
)
memcpy
(
buffer
,
pixels
,
CVPixelBufferGetBytesPerRow
(
imageBuffer
)
*
CVPixelBufferGetHeight
(
imageBuffer
));
if
(
pixels
)
memcpy
(
buffer
,
pixels
,
CVPixelBufferGetBytesPerRow
(
imageBuffer
)
*
CVPixelBufferGetHeight
(
imageBuffer
));
CVPixelBufferUnlockBaseAddress
(
imageBuffer
,
0
);
}
}
CVBufferRelease
(
imageBuffer
);
if
(
pixels
)
if
(
pixels
)
return
currentPts
;
else
return
0
;
...
...
@@ -188,7 +186,7 @@ struct demux_sys_t {
/*****************************************************************************
* qtchroma_to_fourcc
*****************************************************************************/
static
int
qtchroma_to_fourcc
(
int
i_qt
)
static
int
qtchroma_to_fourcc
(
int
i_qt
)
{
static
const
struct
{
...
...
@@ -202,10 +200,9 @@ static int qtchroma_to_fourcc( int i_qt )
{
'
yuvs
'
,
VLC_CODEC_YUYV
},
{
0
,
0
}
};
int
i
;
for
(
i
=
0
;
qtchroma_to_fourcc
[
i
].
i_qt
;
i
++
)
{
if
(
qtchroma_to_fourcc
[
i
].
i_qt
==
i_qt
)
for
(
int
i
=
0
;
qtchroma_to_fourcc
[
i
].
i_qt
;
i
++
)
{
if
(
qtchroma_to_fourcc
[
i
].
i_qt
==
i_qt
)
return
qtchroma_to_fourcc
[
i
].
i_fourcc
;
}
return
0
;
...
...
@@ -214,7 +211,7 @@ static int qtchroma_to_fourcc( int i_qt )
/*****************************************************************************
* Open:
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
static
int
Open
(
vlc_object_t
*
p_this
)
{
demux_t
*
p_demux
=
(
demux_t
*
)
p_this
;
demux_sys_t
*
p_sys
=
NULL
;
...
...
@@ -225,14 +222,14 @@ static int Open( vlc_object_t *p_this )
char
*
psz_uid
=
NULL
;
/* Only when selected */
if
(
*
p_demux
->
psz_access
==
'\0'
)
if
(
*
p_demux
->
psz_access
==
'\0'
)
return
VLC_EGENERIC
;
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
if
(
p_demux
->
psz_location
&&
*
p_demux
->
psz_location
)
if
(
p_demux
->
psz_location
&&
*
p_demux
->
psz_location
)
psz_uid
=
strdup
(
p_demux
->
psz_location
);
msg_Dbg
(
p_demux
,
"qtcapture uid = %s"
,
psz_uid
);
msg_Dbg
(
p_demux
,
"qtcapture uid = %s"
,
psz_uid
);
NSString
*
qtk_currdevice_uid
=
[[
NSString
alloc
]
initWithFormat
:
@"%s"
,
psz_uid
];
/* Set up p_demux */
...
...
@@ -242,69 +239,63 @@ static int Open( vlc_object_t *p_this )
p_demux
->
info
.
i_title
=
0
;
p_demux
->
info
.
i_seekpoint
=
0
;
p_demux
->
p_sys
=
p_sys
=
calloc
(
1
,
sizeof
(
demux_sys_t
)
);
if
(
!
p_sys
)
p_demux
->
p_sys
=
p_sys
=
calloc
(
1
,
sizeof
(
demux_sys_t
)
);
if
(
!
p_sys
)
return
VLC_ENOMEM
;
NSArray
*
myVideoDevices
=
[[[
QTCaptureDevice
inputDevicesWithMediaType
:
QTMediaTypeVideo
]
arrayByAddingObjectsFromArray
:[
QTCaptureDevice
inputDevicesWithMediaType
:
QTMediaTypeMuxed
]]
retain
];
if
([
myVideoDevices
count
]
==
0
)
{
dialog_FatalWait
(
p_demux
,
_
(
"No Input device found"
),
if
([
myVideoDevices
count
]
==
0
)
{
dialog_FatalWait
(
p_demux
,
_
(
"No Input device found"
),
_
(
"Your Mac does not seem to be equipped with a suitable input device. "
"Please check your connectors and drivers."
)
);
msg_Err
(
p_demux
,
"Can't find any Video device"
);
"Please check your connectors and drivers."
));
msg_Err
(
p_demux
,
"Can't find any Video device"
);
goto
error
;
}
NSUInteger
ivideo
;
NSUInteger
deviceCount
=
[
myVideoDevices
count
];
for
(
ivideo
=
0
;
ivideo
<
deviceCount
;
ivideo
++
)
{
for
(
ivideo
=
0
;
ivideo
<
deviceCount
;
ivideo
++
)
{
QTCaptureDevice
*
qtk_device
;
qtk_device
=
[
myVideoDevices
objectAtIndex
:
ivideo
];
msg_Dbg
(
p_demux
,
"qtcapture %lu/%lu %s %s"
,
ivideo
,
deviceCount
,
[[
qtk_device
localizedDisplayName
]
UTF8String
],
[[
qtk_device
uniqueID
]
UTF8String
]);
if
([[[
qtk_device
uniqueID
]
stringByTrimmingCharactersInSet
:[
NSCharacterSet
whitespaceCharacterSet
]]
isEqualToString
:
qtk_currdevice_uid
])
{
msg_Dbg
(
p_demux
,
"qtcapture %lu/%lu %s %s"
,
ivideo
,
deviceCount
,
[[
qtk_device
localizedDisplayName
]
UTF8String
],
[[
qtk_device
uniqueID
]
UTF8String
]);
if
([[[
qtk_device
uniqueID
]
stringByTrimmingCharactersInSet
:[
NSCharacterSet
whitespaceCharacterSet
]]
isEqualToString
:
qtk_currdevice_uid
])
{
break
;
}
}
memset
(
&
p_sys
->
fmt
,
0
,
sizeof
(
es_format_t
)
);
memset
(
&
p_sys
->
fmt
,
0
,
sizeof
(
es_format_t
)
);
QTCaptureDeviceInput
*
input
=
nil
;
NSError
*
o_returnedError
;
if
(
ivideo
<
[
myVideoDevices
count
]
)
if
(
ivideo
<
[
myVideoDevices
count
]
)
p_sys
->
device
=
[
myVideoDevices
objectAtIndex
:
ivideo
];
else
{
else
{
/* cannot found designated device, fall back to open default device */
msg_Dbg
(
p_demux
,
"Cannot find designated uid device as %s, falling back to default."
,
[
qtk_currdevice_uid
UTF8String
]);
p_sys
->
device
=
[
QTCaptureDevice
defaultInputDeviceWithMediaType
:
QTMediaTypeVideo
];
}
if
(
!
p_sys
->
device
)
{
dialog_FatalWait
(
p_demux
,
_
(
"No Input device found"
),
if
(
!
p_sys
->
device
)
{
dialog_FatalWait
(
p_demux
,
_
(
"No Input device found"
),
_
(
"Your Mac does not seem to be equipped with a suitable input device. "
"Please check your connectors and drivers."
)
);
msg_Err
(
p_demux
,
"Can't find any Video device"
);
"Please check your connectors and drivers."
));
msg_Err
(
p_demux
,
"Can't find any Video device"
);
goto
error
;
}
if
(
!
[
p_sys
->
device
open
:
&
o_returnedError
]
)
{
msg_Err
(
p_demux
,
"Unable to open the capture device (%ld)"
,
[
o_returnedError
code
]
);
if
(
!
[
p_sys
->
device
open
:
&
o_returnedError
])
{
msg_Err
(
p_demux
,
"Unable to open the capture device (%ld)"
,
[
o_returnedError
code
]);
goto
error
;
}
if
(
[
p_sys
->
device
isInUseByAnotherApplication
]
==
YES
)
{
msg_Err
(
p_demux
,
"default capture device is exclusively in use by another application"
);
if
([
p_sys
->
device
isInUseByAnotherApplication
]
==
YES
)
{
msg_Err
(
p_demux
,
"default capture device is exclusively in use by another application"
);
goto
error
;
}
input
=
[[
QTCaptureDeviceInput
alloc
]
initWithDevice
:
p_sys
->
device
];
if
(
!
input
)
{
msg_Err
(
p_demux
,
"can't create a valid capture input facility"
);
if
(
!
input
)
{
msg_Err
(
p_demux
,
"can't create a valid capture input facility"
);
goto
error
;
}
...
...
@@ -314,22 +305,22 @@ static int Open( vlc_object_t *p_this )
NSArray
*
format_array
=
[
p_sys
->
device
formatDescriptions
];
QTFormatDescription
*
camera_format
=
NULL
;
NSUInteger
formatCount
=
[
format_array
count
];
for
(
NSUInteger
k
=
0
;
k
<
formatCount
;
k
++
)
{
for
(
NSUInteger
k
=
0
;
k
<
formatCount
;
k
++
)
{
camera_format
=
[
format_array
objectAtIndex
:
k
];
msg_Dbg
(
p_demux
,
"localized Format: %s"
,
[[
camera_format
localizedFormatSummary
]
UTF8String
]
);
msg_Dbg
(
p_demux
,
"format description: %s"
,
[[[
camera_format
formatDescriptionAttributes
]
description
]
UTF8String
]
);
msg_Dbg
(
p_demux
,
"localized Format: %s"
,
[[
camera_format
localizedFormatSummary
]
UTF8String
]);
msg_Dbg
(
p_demux
,
"format description: %s"
,
[[[
camera_format
formatDescriptionAttributes
]
description
]
UTF8String
]);
}
if
(
[
format_array
count
]
)
if
([
format_array
count
]
)
camera_format
=
[
format_array
objectAtIndex
:
0
];
else
goto
error
;
else
goto
error
;
int
qtchroma
=
[
camera_format
formatType
];
int
chroma
=
VLC_CODEC_UYVY
;
/* Now we can init */
es_format_Init
(
&
p_sys
->
fmt
,
VIDEO_ES
,
chroma
);
es_format_Init
(
&
p_sys
->
fmt
,
VIDEO_ES
,
chroma
);
NSSize
encoded_size
=
[[
camera_format
attributeForKey
:
QTFormatDescriptionVideoEncodedPixelsSizeAttribute
]
sizeValue
];
NSSize
display_size
=
[[
camera_format
attributeForKey
:
QTFormatDescriptionVideoCleanApertureDisplaySizeAttribute
]
sizeValue
];
...
...
@@ -343,15 +334,14 @@ static int Open( vlc_object_t *p_this )
p_sys
->
fmt
.
video
.
i_width
=
p_sys
->
width
=
encoded_size
.
width
;
p_sys
->
fmt
.
video
.
i_height
=
p_sys
->
height
=
encoded_size
.
height
;
p_sys
->
fmt
.
video
.
i_frame_rate
=
25
.
0
;
// cave: check with setMinimumVideoFrameInterval (see below)
if
(
par_size
.
width
!=
encoded_size
.
width
)
{
if
(
par_size
.
width
!=
encoded_size
.
width
)
{
p_sys
->
fmt
.
video
.
i_sar_num
=
(
int64_t
)
encoded_size
.
height
*
par_size
.
width
/
encoded_size
.
width
;
p_sys
->
fmt
.
video
.
i_sar_den
=
encoded_size
.
width
;
}
msg_Dbg
(
p_demux
,
"encoded_size %i %i"
,
(
int
)
encoded_size
.
width
,
(
int
)
encoded_size
.
height
);
msg_Dbg
(
p_demux
,
"display_size %i %i"
,
(
int
)
display_size
.
width
,
(
int
)
display_size
.
height
);
msg_Dbg
(
p_demux
,
"PAR size %i %i"
,
(
int
)
par_size
.
width
,
(
int
)
par_size
.
height
);
msg_Dbg
(
p_demux
,
"encoded_size %i %i"
,
(
int
)
encoded_size
.
width
,
(
int
)
encoded_size
.
height
);
msg_Dbg
(
p_demux
,
"display_size %i %i"
,
(
int
)
display_size
.
width
,
(
int
)
display_size
.
height
);
msg_Dbg
(
p_demux
,
"PAR size %i %i"
,
(
int
)
par_size
.
width
,
(
int
)
par_size
.
height
);
[
p_sys
->
output
setPixelBufferAttributes
:
[
NSDictionary
dictionaryWithObjectsAndKeys
:
[
NSNumber
numberWithUnsignedInt
:
kCVPixelFormatType_422YpCbCr8
],
(
id
)
kCVPixelBufferPixelFormatTypeKey
,
...
...
@@ -365,16 +355,14 @@ static int Open( vlc_object_t *p_this )
p_sys
->
session
=
[[
QTCaptureSession
alloc
]
init
];
bool
ret
=
[
p_sys
->
session
addInput
:
input
error
:
&
o_returnedError
];
if
(
!
ret
)
{
msg_Err
(
p_demux
,
"default video capture device could not be added to capture session (%ld)"
,
[
o_returnedError
code
]
);
if
(
!
ret
)
{
msg_Err
(
p_demux
,
"default video capture device could not be added to capture session (%ld)"
,
[
o_returnedError
code
]);
goto
error
;
}
ret
=
[
p_sys
->
session
addOutput
:
p_sys
->
output
error
:
&
o_returnedError
];
if
(
!
ret
)
{
msg_Err
(
p_demux
,
"output could not be added to capture session (%ld)"
,
[
o_returnedError
code
]
);
if
(
!
ret
)
{
msg_Err
(
p_demux
,
"output could not be added to capture session (%ld)"
,
[
o_returnedError
code
]);
goto
error
;
}
...
...
@@ -383,14 +371,14 @@ static int Open( vlc_object_t *p_this )
[
input
release
];
[
pool
release
];
msg_Dbg
(
p_demux
,
"QTCapture: We have a video device ready!"
);
msg_Dbg
(
p_demux
,
"QTCapture: We have a video device ready!"
);
return
VLC_SUCCESS
;
error:
[
input
release
];
[
pool
release
];
free
(
p_sys
);
free
(
p_sys
);
return
VLC_EGENERIC
;
}
...
...
@@ -398,7 +386,7 @@ error:
/*****************************************************************************
* Close:
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
static
void
Close
(
vlc_object_t
*
p_this
)
{
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
...
...
@@ -408,15 +396,14 @@ static void Close( vlc_object_t *p_this )
/* Hack: if libvlc was killed, main interface thread was,
* and poor QTKit needs it, so don't tell him.
* Else we dead lock. */
if
(
vlc_object_alive
(
p_this
->
p_libvlc
))
{
if
(
vlc_object_alive
(
p_this
->
p_libvlc
))
{
// Perform this on main thread, as the framework itself will sometimes try to synchronously
// work on main thread. And this will create a dead lock.
[
p_sys
->
session
performSelectorOnMainThread
:
@selector
(
stopRunning
)
withObject
:
nil
waitUntilDone
:
NO
];
[
p_sys
->
output
performSelectorOnMainThread
:
@selector
(
release
)
withObject
:
nil
waitUntilDone
:
NO
];
[
p_sys
->
session
performSelectorOnMainThread
:
@selector
(
release
)
withObject
:
nil
waitUntilDone
:
NO
];
}
free
(
p_sys
);
free
(
p_sys
);
[
pool
release
];
}
...
...
@@ -425,44 +412,39 @@ static void Close( vlc_object_t *p_this )
/*****************************************************************************
* Demux:
*****************************************************************************/
static
int
Demux
(
demux_t
*
p_demux
)
static
int
Demux
(
demux_t
*
p_demux
)
{
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
block_t
*
p_block
;
p_block
=
block_New
(
p_demux
,
p_sys
->
width
*
p_sys
->
height
*
2
/* FIXME */
);
if
(
!
p_block
)
{
msg_Err
(
p_demux
,
"cannot get block"
);
p_block
=
block_New
(
p_demux
,
p_sys
->
width
*
p_sys
->
height
*
2
/* FIXME */
);
if
(
!
p_block
)
{
msg_Err
(
p_demux
,
"cannot get block"
);
return
0
;
}
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
@synchronized
(
p_sys
->
output
)
{
@synchronized
(
p_sys
->
output
)
{
p_block
->
i_pts
=
[
p_sys
->
output
copyCurrentFrameToBuffer
:
p_block
->
p_buffer
];
}
if
(
!
p_block
->
i_pts
)
{
if
(
!
p_block
->
i_pts
)
{
/* Nothing to display yet, just forget */
block_Release
(
p_block
);
block_Release
(
p_block
);
[
pool
release
];
msleep
(
10000
);
msleep
(
10000
);
return
1
;
}
else
if
(
!
p_sys
->
b_es_setup
)
{
}
else
if
(
!
p_sys
->
b_es_setup
)
{
p_sys
->
fmt
.
video
.
i_frame_rate_base
=
[
p_sys
->
output
timeScale
];
msg_Dbg
(
p_demux
,
"using frame rate base: %i"
,
p_sys
->
fmt
.
video
.
i_frame_rate_base
);
p_sys
->
p_es_video
=
es_out_Add
(
p_demux
->
out
,
&
p_sys
->
fmt
);
msg_Dbg
(
p_demux
,
"added new video es %4.4s %dx%d"
,
(
char
*
)
&
p_sys
->
fmt
.
i_codec
,
p_sys
->
fmt
.
video
.
i_width
,
p_sys
->
fmt
.
video
.
i_height
);
msg_Dbg
(
p_demux
,
"using frame rate base: %i"
,
p_sys
->
fmt
.
video
.
i_frame_rate_base
);
p_sys
->
p_es_video
=
es_out_Add
(
p_demux
->
out
,
&
p_sys
->
fmt
);
msg_Dbg
(
p_demux
,
"added new video es %4.4s %dx%d"
,
(
char
*
)
&
p_sys
->
fmt
.
i_codec
,
p_sys
->
fmt
.
video
.
i_width
,
p_sys
->
fmt
.
video
.
i_height
);
p_sys
->
b_es_setup
=
YES
;
}
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_PCR
,
p_block
->
i_pts
);
es_out_Send
(
p_demux
->
out
,
p_sys
->
p_es_video
,
p_block
);
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_PCR
,
p_block
->
i_pts
);
es_out_Send
(
p_demux
->
out
,
p_sys
->
p_es_video
,
p_block
);
[
pool
release
];
return
1
;
...
...
@@ -471,29 +453,29 @@ static int Demux( demux_t *p_demux )
/*****************************************************************************
* Control:
*****************************************************************************/
static
int
Control
(
demux_t
*
p_demux
,
int
i_query
,
va_list
args
)
static
int
Control
(
demux_t
*
p_demux
,
int
i_query
,
va_list
args
)
{
bool
*
pb
;
int64_t
*
pi64
;
switch
(
i_query
)
switch
(
i_query
)
{
/* Special for access_demux */
case
DEMUX_CAN_PAUSE
:
case
DEMUX_CAN_SEEK
:
case
DEMUX_SET_PAUSE_STATE
:
case
DEMUX_CAN_CONTROL_PACE
:
pb
=
(
bool
*
)
va_arg
(
args
,
bool
*
);
pb
=
(
bool
*
)
va_arg
(
args
,
bool
*
);
*
pb
=
false
;
return
VLC_SUCCESS
;
case
DEMUX_GET_PTS_DELAY
:
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi64
=
INT64_C
(
1000
)
*
var_InheritInteger
(
p_demux
,
"live-caching"
);
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi64
=
INT64_C
(
1000
)
*
var_InheritInteger
(
p_demux
,
"live-caching"
);
return
VLC_SUCCESS
;
case
DEMUX_GET_TIME
:
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi64
=
mdate
();
return
VLC_SUCCESS
;
...
...
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