Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_25606643
ijkplayer
提交
277ffdbf
I
ijkplayer
项目概览
qq_25606643
/
ijkplayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
ijkplayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
277ffdbf
编写于
10月 09, 2015
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ff_ffplay: put options table into individual header file
上级
dd25be7e
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
144 addition
and
113 deletion
+144
-113
ijkmedia/ijkplayer/ff_ffplay.c
ijkmedia/ijkplayer/ff_ffplay.c
+3
-113
ijkmedia/ijkplayer/ff_ffplay_options.h
ijkmedia/ijkplayer/ff_ffplay_options.h
+141
-0
未找到文件。
ijkmedia/ijkplayer/ff_ffplay.c
浏览文件 @
277ffdbf
...
...
@@ -93,121 +93,11 @@
#define FFP_IO_STAT_STEP (50 * 1024)
#define OPTION_OFFSET(x) offsetof(FFPlayer, x)
#define OPTION_INT(default__, min__, max__) \
.type = AV_OPT_TYPE_INT, \
{ .i64 = default__ }, \
.min = min__, \
.max = max__, \
.flags = AV_OPT_FLAG_DECODING_PARAM
#define OPTION_CONST(default__) \
.type = AV_OPT_TYPE_CONST, \
{ .i64 = default__ }, \
.min = INT_MIN, \
.max = INT_MAX, \
.flags = AV_OPT_FLAG_DECODING_PARAM
#define OPTION_STR(default__) \
.type = AV_OPT_TYPE_STRING, \
{ .str = default__ }, \
.min = 0, \
.max = 0, \
.flags = AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
ffp_context_options
[]
=
{
// original options in ffplay.c
// FFP_MERGE: x, y, s, fs
{
"an"
,
"disable audio"
,
OPTION_OFFSET
(
audio_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"vn"
,
"disable video"
,
OPTION_OFFSET
(
video_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: sn, ast, vst, sst
// TODO: ss
{
"nodisp"
,
"disable graphical display"
,
OPTION_OFFSET
(
display_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: f, pix_fmt, stats
{
"fast"
,
"non spec compliant optimizations"
,
OPTION_OFFSET
(
fast
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: genpts, drp, lowres, sync, autoexit, exitonkeydown, exitonmousedown
{
"loop"
,
"set number of times the playback shall be looped"
,
OPTION_OFFSET
(
loop
),
OPTION_INT
(
1
,
INT_MIN
,
INT_MAX
)
},
{
"infbuf"
,
"don't limit the input buffer size (useful with realtime streams)"
,
OPTION_OFFSET
(
infinite_buffer
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"framedrop"
,
"drop frames when cpu is too slow"
,
OPTION_OFFSET
(
framedrop
),
OPTION_INT
(
0
,
-
1
,
120
)
},
// FFP_MERGE: window_title
#if CONFIG_AVFILTER
{
"af"
,
"audio filters"
,
OPTION_OFFSET
(
afilters
),
OPTION_STR
(
NULL
)
},
{
"vf0"
,
"video filters 0"
,
OPTION_OFFSET
(
vfilter0
),
OPTION_STR
(
NULL
)
},
#endif
{
"rdftspeed"
,
"rdft speed, in msecs"
,
OPTION_OFFSET
(
rdftspeed
),
OPTION_INT
(
0
,
0
,
INT_MAX
)
},
// FFP_MERGE: showmode, default, i, codec, acodec, scodec, vcodec
// TODO: autorotate
// extended options in ff_ffplay.c
{
"max-fps"
,
"drop frames in video whose fps is greater than max-fps"
,
OPTION_OFFSET
(
max_fps
),
OPTION_INT
(
31
,
0
,
121
)
},
{
"overlay-format"
,
"fourcc of overlay format"
,
OPTION_OFFSET
(
overlay_format
),
OPTION_INT
(
SDL_FCC_RV32
,
INT_MIN
,
INT_MAX
),
.
unit
=
"overlay-format"
},
{
"fcc-i420"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_I420
),
.
unit
=
"overlay-format"
},
{
"fcc-yv12"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_YV12
),
.
unit
=
"overlay-format"
},
{
"fcc-rv16"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV16
),
.
unit
=
"overlay-format"
},
{
"fcc-rv24"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV24
),
.
unit
=
"overlay-format"
},
{
"fcc-rv32"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV32
),
.
unit
=
"overlay-format"
},
{
"start-on-prepared"
,
"automatically start playing on prepared"
,
OPTION_OFFSET
(
start_on_prepared
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"video-pictq-size"
,
"max picture queue frame count"
,
OPTION_OFFSET
(
pictq_size
),
OPTION_INT
(
VIDEO_PICTURE_QUEUE_SIZE_DEFAULT
,
VIDEO_PICTURE_QUEUE_SIZE_MIN
,
VIDEO_PICTURE_QUEUE_SIZE_MAX
)
},
{
"max-buffer-size"
,
"max buffer size should be pre-read"
,
OPTION_OFFSET
(
max_buffer_size
),
OPTION_INT
(
MAX_QUEUE_SIZE
,
0
,
MAX_QUEUE_SIZE
)
},
{
"packet-buffering"
,
"pause output until enough packets have been read after stalling"
,
OPTION_OFFSET
(
packet_buffering
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"sync-av-start"
,
"synchronise a/v start time"
,
OPTION_OFFSET
(
sync_av_start
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"iformat"
,
"force format"
,
OPTION_OFFSET
(
iformat_name
),
OPTION_STR
(
NULL
)
},
{
"min-frames"
,
"minimal frames to stop pre-reading"
,
OPTION_OFFSET
(
min_frames
),
OPTION_INT
(
DEFAULT_MIN_FRAMES
,
MIN_MIN_FRAMES
,
MAX_MIN_FRAMES
)
},
// iOS only options
{
"videotoolbox"
,
"VideoToolbox: enable"
,
OPTION_OFFSET
(
videotoolbox
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"videotoolbox-max-frame-width"
,
"VideoToolbox: max width of output frame"
,
OPTION_OFFSET
(
vtb_max_frame_width
),
OPTION_INT
(
0
,
0
,
INT_MAX
)
},
{
"videotoolbox-async"
,
"VideoToolbox: use kVTDecodeFrame_EnableAsynchronousDecompression()"
,
OPTION_OFFSET
(
vtb_async
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"videotoolbox-wait-async"
,
"VideoToolbox: call VTDecompressionSessionWaitForAsynchronousFrames()"
,
OPTION_OFFSET
(
vtb_wait_async
),
OPTION_INT
(
1
,
0
,
1
)
},
// Android only options
{
"mediacodec"
,
"MediaCodec: enable"
,
OPTION_OFFSET
(
mediacodec
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"mediacodec-auto-rotate"
,
"MediaCodec: auto rotate frame depending on meta"
,
OPTION_OFFSET
(
mediacodec_auto_rotate
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"opensles"
,
"OpenSL ES: enable"
,
OPTION_OFFSET
(
opensles
),
OPTION_INT
(
0
,
0
,
1
)
},
{
NULL
}
};
#undef OPTION_CONST
#undef OPTION_INT
#undef OPTION_OFFSET
#define FFP_BUF_MSG_PERIOD (3)
// static const AVOption ffp_context_options[] = ...
#include "ff_ffplay_options.h"
static
AVPacket
flush_pkt
;
#if CONFIG_AVFILTER
...
...
ijkmedia/ijkplayer/ff_ffplay_options.h
0 → 100644
浏览文件 @
277ffdbf
/*
* ff_ffplaye_options.h
*
* Copyright (c) 2015 Zhang Rui <bbcallen@gmail.com>
*
* This file is part of ijkPlayer.
*
* ijkPlayer 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.
*
* ijkPlayer 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 ijkPlayer; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef FFPLAY__FF_FFPLAY_OPTIONS_H
#define FFPLAY__FF_FFPLAY_OPTIONS_H
#define OPTION_OFFSET(x) offsetof(FFPlayer, x)
#define OPTION_INT(default__, min__, max__) \
.type = AV_OPT_TYPE_INT, \
{ .i64 = default__ }, \
.min = min__, \
.max = max__, \
.flags = AV_OPT_FLAG_DECODING_PARAM
#define OPTION_CONST(default__) \
.type = AV_OPT_TYPE_CONST, \
{ .i64 = default__ }, \
.min = INT_MIN, \
.max = INT_MAX, \
.flags = AV_OPT_FLAG_DECODING_PARAM
#define OPTION_STR(default__) \
.type = AV_OPT_TYPE_STRING, \
{ .str = default__ }, \
.min = 0, \
.max = 0, \
.flags = AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
ffp_context_options
[]
=
{
// original options in ffplay.c
// FFP_MERGE: x, y, s, fs
{
"an"
,
"disable audio"
,
OPTION_OFFSET
(
audio_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"vn"
,
"disable video"
,
OPTION_OFFSET
(
video_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: sn, ast, vst, sst
// TODO: ss
{
"nodisp"
,
"disable graphical display"
,
OPTION_OFFSET
(
display_disable
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: f, pix_fmt, stats
{
"fast"
,
"non spec compliant optimizations"
,
OPTION_OFFSET
(
fast
),
OPTION_INT
(
0
,
0
,
1
)
},
// FFP_MERGE: genpts, drp, lowres, sync, autoexit, exitonkeydown, exitonmousedown
{
"loop"
,
"set number of times the playback shall be looped"
,
OPTION_OFFSET
(
loop
),
OPTION_INT
(
1
,
INT_MIN
,
INT_MAX
)
},
{
"infbuf"
,
"don't limit the input buffer size (useful with realtime streams)"
,
OPTION_OFFSET
(
infinite_buffer
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"framedrop"
,
"drop frames when cpu is too slow"
,
OPTION_OFFSET
(
framedrop
),
OPTION_INT
(
0
,
-
1
,
120
)
},
// FFP_MERGE: window_title
#if CONFIG_AVFILTER
{
"af"
,
"audio filters"
,
OPTION_OFFSET
(
afilters
),
OPTION_STR
(
NULL
)
},
{
"vf0"
,
"video filters 0"
,
OPTION_OFFSET
(
vfilter0
),
OPTION_STR
(
NULL
)
},
#endif
{
"rdftspeed"
,
"rdft speed, in msecs"
,
OPTION_OFFSET
(
rdftspeed
),
OPTION_INT
(
0
,
0
,
INT_MAX
)
},
// FFP_MERGE: showmode, default, i, codec, acodec, scodec, vcodec
// TODO: autorotate
// extended options in ff_ffplay.c
{
"max-fps"
,
"drop frames in video whose fps is greater than max-fps"
,
OPTION_OFFSET
(
max_fps
),
OPTION_INT
(
31
,
0
,
121
)
},
{
"overlay-format"
,
"fourcc of overlay format"
,
OPTION_OFFSET
(
overlay_format
),
OPTION_INT
(
SDL_FCC_RV32
,
INT_MIN
,
INT_MAX
),
.
unit
=
"overlay-format"
},
{
"fcc-i420"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_I420
),
.
unit
=
"overlay-format"
},
{
"fcc-yv12"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_YV12
),
.
unit
=
"overlay-format"
},
{
"fcc-rv16"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV16
),
.
unit
=
"overlay-format"
},
{
"fcc-rv24"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV24
),
.
unit
=
"overlay-format"
},
{
"fcc-rv32"
,
""
,
0
,
OPTION_CONST
(
SDL_FCC_RV32
),
.
unit
=
"overlay-format"
},
{
"start-on-prepared"
,
"automatically start playing on prepared"
,
OPTION_OFFSET
(
start_on_prepared
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"video-pictq-size"
,
"max picture queue frame count"
,
OPTION_OFFSET
(
pictq_size
),
OPTION_INT
(
VIDEO_PICTURE_QUEUE_SIZE_DEFAULT
,
VIDEO_PICTURE_QUEUE_SIZE_MIN
,
VIDEO_PICTURE_QUEUE_SIZE_MAX
)
},
{
"max-buffer-size"
,
"max buffer size should be pre-read"
,
OPTION_OFFSET
(
max_buffer_size
),
OPTION_INT
(
MAX_QUEUE_SIZE
,
0
,
MAX_QUEUE_SIZE
)
},
{
"packet-buffering"
,
"pause output until enough packets have been read after stalling"
,
OPTION_OFFSET
(
packet_buffering
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"sync-av-start"
,
"synchronise a/v start time"
,
OPTION_OFFSET
(
sync_av_start
),
OPTION_INT
(
1
,
0
,
1
)
},
{
"iformat"
,
"force format"
,
OPTION_OFFSET
(
iformat_name
),
OPTION_STR
(
NULL
)
},
{
"min-frames"
,
"minimal frames to stop pre-reading"
,
OPTION_OFFSET
(
min_frames
),
OPTION_INT
(
DEFAULT_MIN_FRAMES
,
MIN_MIN_FRAMES
,
MAX_MIN_FRAMES
)
},
// iOS only options
{
"videotoolbox"
,
"VideoToolbox: enable"
,
OPTION_OFFSET
(
videotoolbox
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"videotoolbox-max-frame-width"
,
"VideoToolbox: max width of output frame"
,
OPTION_OFFSET
(
vtb_max_frame_width
),
OPTION_INT
(
0
,
0
,
INT_MAX
)
},
{
"videotoolbox-async"
,
"VideoToolbox: use kVTDecodeFrame_EnableAsynchronousDecompression()"
,
OPTION_OFFSET
(
vtb_async
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"videotoolbox-wait-async"
,
"VideoToolbox: call VTDecompressionSessionWaitForAsynchronousFrames()"
,
OPTION_OFFSET
(
vtb_wait_async
),
OPTION_INT
(
1
,
0
,
1
)
},
// Android only options
{
"mediacodec"
,
"MediaCodec: enable"
,
OPTION_OFFSET
(
mediacodec
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"mediacodec-auto-rotate"
,
"MediaCodec: auto rotate frame depending on meta"
,
OPTION_OFFSET
(
mediacodec_auto_rotate
),
OPTION_INT
(
0
,
0
,
1
)
},
{
"opensles"
,
"OpenSL ES: enable"
,
OPTION_OFFSET
(
opensles
),
OPTION_INT
(
0
,
0
,
1
)
},
{
NULL
}
};
#undef OPTION_STR
#undef OPTION_CONST
#undef OPTION_INT
#undef OPTION_OFFSET
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录