Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
8d3db95f
Commit
8d3db95f
authored
7 years ago
by
Diego Biurrun
Browse files
Options
Downloads
Patches
Plain Diff
sndio: Coalesce source files after outdev removal
parent
8e7e042d
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
libavdevice/Makefile
+1
-1
1 addition, 1 deletion
libavdevice/Makefile
libavdevice/sndio.c
+103
-5
103 additions, 5 deletions
libavdevice/sndio.c
libavdevice/sndio.h
+0
-48
0 additions, 48 deletions
libavdevice/sndio.h
libavdevice/sndio_dec.c
+0
-120
0 additions, 120 deletions
libavdevice/sndio_dec.c
with
104 additions
and
174 deletions
libavdevice/Makefile
+
1
−
1
View file @
8d3db95f
...
...
@@ -18,7 +18,7 @@ OBJS-$(CONFIG_FBDEV_INDEV) += fbdev.o
OBJS-$(CONFIG_JACK_INDEV)
+=
jack.o timefilter.o
OBJS-$(CONFIG_OSS_INDEV)
+=
oss_dec.o oss.o
OBJS-$(CONFIG_PULSE_INDEV)
+=
pulse.o
OBJS-$(CONFIG_SNDIO_INDEV)
+=
sndio_dec.o
sndio.o
OBJS-$(CONFIG_SNDIO_INDEV)
+=
sndio.o
OBJS-$(CONFIG_V4L2_INDEV)
+=
v4l2.o
OBJS-$(CONFIG_VFWCAP_INDEV)
+=
vfwcap.o
OBJS-$(CONFIG_XCBGRAB_INDEV)
+=
xcbgrab.o
...
...
This diff is collapsed.
Click to expand it.
libavdevice/sndio.c
+
103
−
5
View file @
8d3db95f
/*
* sndio
play and
grab interface
* sndio grab interface
* Copyright (c) 2010 Jacob Meuser
*
* This file is part of Libav.
...
...
@@ -22,9 +22,26 @@
#include
<stdint.h>
#include
<sndio.h>
#include
"libavutil/internal.h"
#include
"libavutil/opt.h"
#include
"libavutil/time.h"
#include
"libavformat/avformat.h"
#include
"libavformat/internal.h"
#include
"libavdevice/sndio.h"
typedef
struct
SndioData
{
AVClass
*
class
;
struct
sio_hdl
*
hdl
;
enum
AVCodecID
codec_id
;
int64_t
hwpos
;
int64_t
softpos
;
uint8_t
*
buffer
;
int
bps
;
int
buffer_size
;
int
buffer_offset
;
int
channels
;
int
sample_rate
;
}
SndioData
;
static
inline
void
movecb
(
void
*
addr
,
int
delta
)
{
...
...
@@ -33,8 +50,8 @@ static inline void movecb(void *addr, int delta)
s
->
hwpos
+=
delta
*
s
->
channels
*
s
->
bps
;
}
av_cold
int
ff_
sndio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
)
static
av_cold
int
sndio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
)
{
SndioData
*
s
=
s1
->
priv_data
;
struct
sio_hdl
*
hdl
;
...
...
@@ -109,8 +126,65 @@ fail:
return
AVERROR
(
EIO
);
}
int
ff_sndio_close
(
SndioData
*
s
)
static
av_cold
int
audio_read_header
(
AVFormatContext
*
s1
)
{
SndioData
*
s
=
s1
->
priv_data
;
AVStream
*
st
;
int
ret
;
st
=
avformat_new_stream
(
s1
,
NULL
);
if
(
!
st
)
return
AVERROR
(
ENOMEM
);
ret
=
sndio_open
(
s1
,
0
,
s1
->
filename
);
if
(
ret
<
0
)
return
ret
;
/* take real parameters */
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
st
->
codecpar
->
codec_id
=
s
->
codec_id
;
st
->
codecpar
->
sample_rate
=
s
->
sample_rate
;
st
->
codecpar
->
channels
=
s
->
channels
;
avpriv_set_pts_info
(
st
,
64
,
1
,
1000000
);
/* 64 bits pts in us */
return
0
;
}
static
int
audio_read_packet
(
AVFormatContext
*
s1
,
AVPacket
*
pkt
)
{
SndioData
*
s
=
s1
->
priv_data
;
int64_t
bdelay
,
cur_time
;
int
ret
;
if
((
ret
=
av_new_packet
(
pkt
,
s
->
buffer_size
))
<
0
)
return
ret
;
ret
=
sio_read
(
s
->
hdl
,
pkt
->
data
,
pkt
->
size
);
if
(
ret
==
0
||
sio_eof
(
s
->
hdl
))
{
av_packet_unref
(
pkt
);
return
AVERROR_EOF
;
}
pkt
->
size
=
ret
;
s
->
softpos
+=
ret
;
/* compute pts of the start of the packet */
cur_time
=
av_gettime
();
bdelay
=
ret
+
s
->
hwpos
-
s
->
softpos
;
/* convert to pts */
pkt
->
pts
=
cur_time
-
((
bdelay
*
1000000
)
/
(
s
->
bps
*
s
->
channels
*
s
->
sample_rate
));
return
0
;
}
static
av_cold
int
audio_read_close
(
AVFormatContext
*
s1
)
{
SndioData
*
s
=
s1
->
priv_data
;
av_freep
(
&
s
->
buffer
);
if
(
s
->
hdl
)
...
...
@@ -118,3 +192,27 @@ int ff_sndio_close(SndioData *s)
return
0
;
}
static
const
AVOption
options
[]
=
{
{
"sample_rate"
,
""
,
offsetof
(
SndioData
,
sample_rate
),
AV_OPT_TYPE_INT
,
{.
i64
=
48000
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
"channels"
,
""
,
offsetof
(
SndioData
,
channels
),
AV_OPT_TYPE_INT
,
{.
i64
=
2
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
NULL
},
};
static
const
AVClass
sndio_demuxer_class
=
{
.
class_name
=
"sndio indev"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
AVInputFormat
ff_sndio_demuxer
=
{
.
name
=
"sndio"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"sndio audio capture"
),
.
priv_data_size
=
sizeof
(
SndioData
),
.
read_header
=
audio_read_header
,
.
read_packet
=
audio_read_packet
,
.
read_close
=
audio_read_close
,
.
flags
=
AVFMT_NOFILE
,
.
priv_class
=
&
sndio_demuxer_class
,
};
This diff is collapsed.
Click to expand it.
libavdevice/sndio.h
deleted
100644 → 0
+
0
−
48
View file @
8e7e042d
/*
* sndio play and grab interface
* Copyright (c) 2010 Jacob Meuser
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVDEVICE_SNDIO_H
#define AVDEVICE_SNDIO_H
#include
<stdint.h>
#include
<sndio.h>
#include
"libavformat/avformat.h"
#include
"libavutil/log.h"
typedef
struct
SndioData
{
AVClass
*
class
;
struct
sio_hdl
*
hdl
;
enum
AVCodecID
codec_id
;
int64_t
hwpos
;
int64_t
softpos
;
uint8_t
*
buffer
;
int
bps
;
int
buffer_size
;
int
buffer_offset
;
int
channels
;
int
sample_rate
;
}
SndioData
;
int
ff_sndio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
);
int
ff_sndio_close
(
SndioData
*
s
);
#endif
/* AVDEVICE_SNDIO_H */
This diff is collapsed.
Click to expand it.
libavdevice/sndio_dec.c
deleted
100644 → 0
+
0
−
120
View file @
8e7e042d
/*
* sndio play and grab interface
* Copyright (c) 2010 Jacob Meuser
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include
<stdint.h>
#include
<sndio.h>
#include
"libavutil/internal.h"
#include
"libavutil/opt.h"
#include
"libavutil/time.h"
#include
"libavformat/avformat.h"
#include
"libavformat/internal.h"
#include
"libavdevice/sndio.h"
static
av_cold
int
audio_read_header
(
AVFormatContext
*
s1
)
{
SndioData
*
s
=
s1
->
priv_data
;
AVStream
*
st
;
int
ret
;
st
=
avformat_new_stream
(
s1
,
NULL
);
if
(
!
st
)
return
AVERROR
(
ENOMEM
);
ret
=
ff_sndio_open
(
s1
,
0
,
s1
->
filename
);
if
(
ret
<
0
)
return
ret
;
/* take real parameters */
st
->
codecpar
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
st
->
codecpar
->
codec_id
=
s
->
codec_id
;
st
->
codecpar
->
sample_rate
=
s
->
sample_rate
;
st
->
codecpar
->
channels
=
s
->
channels
;
avpriv_set_pts_info
(
st
,
64
,
1
,
1000000
);
/* 64 bits pts in us */
return
0
;
}
static
int
audio_read_packet
(
AVFormatContext
*
s1
,
AVPacket
*
pkt
)
{
SndioData
*
s
=
s1
->
priv_data
;
int64_t
bdelay
,
cur_time
;
int
ret
;
if
((
ret
=
av_new_packet
(
pkt
,
s
->
buffer_size
))
<
0
)
return
ret
;
ret
=
sio_read
(
s
->
hdl
,
pkt
->
data
,
pkt
->
size
);
if
(
ret
==
0
||
sio_eof
(
s
->
hdl
))
{
av_packet_unref
(
pkt
);
return
AVERROR_EOF
;
}
pkt
->
size
=
ret
;
s
->
softpos
+=
ret
;
/* compute pts of the start of the packet */
cur_time
=
av_gettime
();
bdelay
=
ret
+
s
->
hwpos
-
s
->
softpos
;
/* convert to pts */
pkt
->
pts
=
cur_time
-
((
bdelay
*
1000000
)
/
(
s
->
bps
*
s
->
channels
*
s
->
sample_rate
));
return
0
;
}
static
av_cold
int
audio_read_close
(
AVFormatContext
*
s1
)
{
SndioData
*
s
=
s1
->
priv_data
;
ff_sndio_close
(
s
);
return
0
;
}
static
const
AVOption
options
[]
=
{
{
"sample_rate"
,
""
,
offsetof
(
SndioData
,
sample_rate
),
AV_OPT_TYPE_INT
,
{.
i64
=
48000
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
"channels"
,
""
,
offsetof
(
SndioData
,
channels
),
AV_OPT_TYPE_INT
,
{.
i64
=
2
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
NULL
},
};
static
const
AVClass
sndio_demuxer_class
=
{
.
class_name
=
"sndio indev"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
AVInputFormat
ff_sndio_demuxer
=
{
.
name
=
"sndio"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"sndio audio capture"
),
.
priv_data_size
=
sizeof
(
SndioData
),
.
read_header
=
audio_read_header
,
.
read_packet
=
audio_read_packet
,
.
read_close
=
audio_read_close
,
.
flags
=
AVFMT_NOFILE
,
.
priv_class
=
&
sndio_demuxer_class
,
};
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment