Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
6ce13070
Commit
6ce13070
authored
Sep 27, 2017
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oss: Coalesce source files after outdev removal
parent
8d3db95f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
117 additions
and
198 deletions
+117
-198
Makefile
libavdevice/Makefile
+1
-1
oss.c
libavdevice/oss.c
+116
-6
oss.h
libavdevice/oss.h
+0
-45
oss_dec.c
libavdevice/oss_dec.c
+0
-146
No files found.
libavdevice/Makefile
View file @
6ce13070
...
...
@@ -16,7 +16,7 @@ OBJS-$(CONFIG_BKTR_INDEV) += bktr.o
OBJS-$(CONFIG_DV1394_INDEV)
+=
dv1394.o
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_OSS_INDEV)
+=
oss.o
OBJS-$(CONFIG_PULSE_INDEV)
+=
pulse.o
OBJS-$(CONFIG_SNDIO_INDEV)
+=
sndio.o
OBJS-$(CONFIG_V4L2_INDEV)
+=
v4l2.o
...
...
libavdevice/oss.c
View file @
6ce13070
...
...
@@ -28,15 +28,30 @@
#include <sys/soundcard.h>
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "oss.h"
int
ff_oss_audio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
)
#include "libavformat/internal.h"
#define OSS_AUDIO_BLOCK_SIZE 4096
typedef
struct
OSSAudioData
{
AVClass
*
class
;
int
fd
;
int
sample_rate
;
int
channels
;
int
frame_size
;
/* in bytes ! */
enum
AVCodecID
codec_id
;
unsigned
int
flip_left
:
1
;
uint8_t
buffer
[
OSS_AUDIO_BLOCK_SIZE
];
int
buffer_ptr
;
}
OSSAudioData
;
static
int
oss_audio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
int
audio_fd
;
...
...
@@ -126,8 +141,103 @@ int ff_oss_audio_open(AVFormatContext *s1, int is_output,
#undef CHECK_IOCTL_ERROR
}
int
ff_oss_audio_close
(
OSSAudioData
*
s
)
static
int
audio_read_header
(
AVFormatContext
*
s1
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
AVStream
*
st
;
int
ret
;
st
=
avformat_new_stream
(
s1
,
NULL
);
if
(
!
st
)
{
return
AVERROR
(
ENOMEM
);
}
ret
=
oss_audio_open
(
s1
,
0
,
s1
->
filename
);
if
(
ret
<
0
)
{
return
AVERROR
(
EIO
);
}
/* 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
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
int
ret
,
bdelay
;
int64_t
cur_time
;
struct
audio_buf_info
abufi
;
if
((
ret
=
av_new_packet
(
pkt
,
s
->
frame_size
))
<
0
)
return
ret
;
ret
=
read
(
s
->
fd
,
pkt
->
data
,
pkt
->
size
);
if
(
ret
<=
0
){
av_packet_unref
(
pkt
);
pkt
->
size
=
0
;
if
(
ret
<
0
)
return
AVERROR
(
errno
);
else
return
AVERROR_EOF
;
}
pkt
->
size
=
ret
;
/* compute pts of the start of the packet */
cur_time
=
av_gettime
();
bdelay
=
ret
;
if
(
ioctl
(
s
->
fd
,
SNDCTL_DSP_GETISPACE
,
&
abufi
)
==
0
)
{
bdelay
+=
abufi
.
bytes
;
}
/* subtract time represented by the number of bytes in the audio fifo */
cur_time
-=
(
bdelay
*
1000000LL
)
/
(
s
->
sample_rate
*
s
->
channels
);
/* convert to wanted units */
pkt
->
pts
=
cur_time
;
if
(
s
->
flip_left
&&
s
->
channels
==
2
)
{
int
i
;
short
*
p
=
(
short
*
)
pkt
->
data
;
for
(
i
=
0
;
i
<
ret
;
i
+=
4
)
{
*
p
=
~*
p
;
p
+=
2
;
}
}
return
0
;
}
static
int
audio_read_close
(
AVFormatContext
*
s1
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
close
(
s
->
fd
);
return
0
;
}
static
const
AVOption
options
[]
=
{
{
"sample_rate"
,
""
,
offsetof
(
OSSAudioData
,
sample_rate
),
AV_OPT_TYPE_INT
,
{.
i64
=
48000
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
"channels"
,
""
,
offsetof
(
OSSAudioData
,
channels
),
AV_OPT_TYPE_INT
,
{.
i64
=
2
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
NULL
},
};
static
const
AVClass
oss_demuxer_class
=
{
.
class_name
=
"OSS demuxer"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
AVInputFormat
ff_oss_demuxer
=
{
.
name
=
"oss"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"OSS (Open Sound System) capture"
),
.
priv_data_size
=
sizeof
(
OSSAudioData
),
.
read_header
=
audio_read_header
,
.
read_packet
=
audio_read_packet
,
.
read_close
=
audio_read_close
,
.
flags
=
AVFMT_NOFILE
,
.
priv_class
=
&
oss_demuxer_class
,
};
libavdevice/oss.h
deleted
100644 → 0
View file @
8d3db95f
/*
* 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_OSS_H
#define AVDEVICE_OSS_H
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#define OSS_AUDIO_BLOCK_SIZE 4096
typedef
struct
OSSAudioData
{
AVClass
*
class
;
int
fd
;
int
sample_rate
;
int
channels
;
int
frame_size
;
/* in bytes ! */
enum
AVCodecID
codec_id
;
unsigned
int
flip_left
:
1
;
uint8_t
buffer
[
OSS_AUDIO_BLOCK_SIZE
];
int
buffer_ptr
;
}
OSSAudioData
;
int
ff_oss_audio_open
(
AVFormatContext
*
s1
,
int
is_output
,
const
char
*
audio_device
);
int
ff_oss_audio_close
(
OSSAudioData
*
s
);
#endif
/* AVDEVICE_OSS_H */
libavdevice/oss_dec.c
deleted
100644 → 0
View file @
8d3db95f
/*
* Linux audio play interface
* Copyright (c) 2000, 2001 Fabrice Bellard
*
* 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 "config.h"
#include <stdint.h>
#if HAVE_SOUNDCARD_H
#include <soundcard.h>
#else
#include <sys/soundcard.h>
#endif
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavformat/internal.h"
#include "oss.h"
static
int
audio_read_header
(
AVFormatContext
*
s1
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
AVStream
*
st
;
int
ret
;
st
=
avformat_new_stream
(
s1
,
NULL
);
if
(
!
st
)
{
return
AVERROR
(
ENOMEM
);
}
ret
=
ff_oss_audio_open
(
s1
,
0
,
s1
->
filename
);
if
(
ret
<
0
)
{
return
AVERROR
(
EIO
);
}
/* 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
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
int
ret
,
bdelay
;
int64_t
cur_time
;
struct
audio_buf_info
abufi
;
if
((
ret
=
av_new_packet
(
pkt
,
s
->
frame_size
))
<
0
)
return
ret
;
ret
=
read
(
s
->
fd
,
pkt
->
data
,
pkt
->
size
);
if
(
ret
<=
0
){
av_packet_unref
(
pkt
);
pkt
->
size
=
0
;
if
(
ret
<
0
)
return
AVERROR
(
errno
);
else
return
AVERROR_EOF
;
}
pkt
->
size
=
ret
;
/* compute pts of the start of the packet */
cur_time
=
av_gettime
();
bdelay
=
ret
;
if
(
ioctl
(
s
->
fd
,
SNDCTL_DSP_GETISPACE
,
&
abufi
)
==
0
)
{
bdelay
+=
abufi
.
bytes
;
}
/* subtract time represented by the number of bytes in the audio fifo */
cur_time
-=
(
bdelay
*
1000000LL
)
/
(
s
->
sample_rate
*
s
->
channels
);
/* convert to wanted units */
pkt
->
pts
=
cur_time
;
if
(
s
->
flip_left
&&
s
->
channels
==
2
)
{
int
i
;
short
*
p
=
(
short
*
)
pkt
->
data
;
for
(
i
=
0
;
i
<
ret
;
i
+=
4
)
{
*
p
=
~*
p
;
p
+=
2
;
}
}
return
0
;
}
static
int
audio_read_close
(
AVFormatContext
*
s1
)
{
OSSAudioData
*
s
=
s1
->
priv_data
;
ff_oss_audio_close
(
s
);
return
0
;
}
static
const
AVOption
options
[]
=
{
{
"sample_rate"
,
""
,
offsetof
(
OSSAudioData
,
sample_rate
),
AV_OPT_TYPE_INT
,
{.
i64
=
48000
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
"channels"
,
""
,
offsetof
(
OSSAudioData
,
channels
),
AV_OPT_TYPE_INT
,
{.
i64
=
2
},
1
,
INT_MAX
,
AV_OPT_FLAG_DECODING_PARAM
},
{
NULL
},
};
static
const
AVClass
oss_demuxer_class
=
{
.
class_name
=
"OSS demuxer"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
AVInputFormat
ff_oss_demuxer
=
{
.
name
=
"oss"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"OSS (Open Sound System) capture"
),
.
priv_data_size
=
sizeof
(
OSSAudioData
),
.
read_header
=
audio_read_header
,
.
read_packet
=
audio_read_packet
,
.
read_close
=
audio_read_close
,
.
flags
=
AVFMT_NOFILE
,
.
priv_class
=
&
oss_demuxer_class
,
};
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