@ -54,13 +54,6 @@
# include "libavutil/pixdesc.h"
# include "libavutil/pixfmt.h"
const char * const opt_name_codec_names [ ] = { " c " , " codec " , " acodec " , " vcodec " , " scodec " , " dcodec " , NULL } ;
const char * const opt_name_frame_rates [ ] = { " r " , NULL } ;
const char * const opt_name_codec_tags [ ] = { " tag " , " atag " , " vtag " , " stag " , NULL } ;
# if FFMPEG_OPT_TOP
const char * const opt_name_top_field_first [ ] = { " top " , NULL } ;
# endif
HWDevice * filter_hw_device ;
char * vstats_filename ;
@ -1289,7 +1282,7 @@ static int open_files(OptionGroupList *l, const char *inout, Scheduler *sch,
init_options ( & o ) ;
o . g = g ;
ret = parse_optgroup ( & o , g ) ;
ret = parse_optgroup ( & o , g , options ) ;
if ( ret < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Error parsing options for %s file "
" %s. \n " , inout , g - > arg ) ;
@ -1328,7 +1321,7 @@ int ffmpeg_parse_options(int argc, char **argv, Scheduler *sch)
}
/* apply global options */
ret = parse_optgroup ( sch , & octx . global_opts ) ;
ret = parse_optgroup ( sch , & octx . global_opts , options ) ;
if ( ret < 0 ) {
errmsg = " parsing global options " ;
goto fail ;
@ -1430,6 +1423,15 @@ static int opt_adrift_threshold(void *optctx, const char *opt, const char *arg)
}
# endif
static const char * const alt_bsf [ ] = { " absf " , " vbsf " , NULL } ;
static const char * const alt_channel_layout [ ] = { " ch_layout " , NULL } ;
static const char * const alt_codec [ ] = { " c " , " acodec " , " vcodec " , " scodec " , " dcodec " , NULL } ;
static const char * const alt_filter [ ] = { " af " , " vf " , NULL } ;
static const char * const alt_frames [ ] = { " aframes " , " vframes " , " dframes " , NULL } ;
static const char * const alt_pre [ ] = { " apre " , " vpre " , " spre " , NULL } ;
static const char * const alt_qscale [ ] = { " q " , NULL } ;
static const char * const alt_tag [ ] = { " atag " , " vtag " , " stag " , NULL } ;
# define OFFSET(x) offsetof(OptionsContext, x)
const OptionDef options [ ] = {
/* main options */
@ -1452,15 +1454,18 @@ const OptionDef options[] = {
{ " recast_media " , OPT_TYPE_BOOL , OPT_EXPERT ,
{ & recast_media } ,
" allow recasting stream type in order to force a decoder of different media type " } ,
{ " c " , OPT_TYPE_STRING , OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
{ " c " , OPT_TYPE_STRING , OPT_SPEC | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . off = OFFSET ( codec_names ) } ,
" codec name " , " codec " } ,
{ " codec " , OPT_TYPE_STRING , OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
" codec name " , " codec " ,
. u1 . name_canon = " codec " , } ,
{ " codec " , OPT_TYPE_STRING , OPT_SPEC | OPT_INPUT | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( codec_names ) } ,
" codec name " , " codec " } ,
{ " pre " , OPT_TYPE_STRING , OPT_SPEC | OPT_OUTPUT ,
" codec name " , " codec " ,
. u1 . names_alt = alt_codec , } ,
{ " pre " , OPT_TYPE_STRING , OPT_SPEC | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( presets ) } ,
" preset name " , " preset " } ,
" preset name " , " preset " ,
. u1 . names_alt = alt_pre , } ,
{ " map " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
{ . func_arg = opt_map } ,
" set input stream mapping " ,
@ -1515,9 +1520,10 @@ const OptionDef options[] = {
{ " stream_group " , OPT_TYPE_STRING , OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( stream_groups ) } ,
" add stream group with specified streams and group type-specific arguments " , " id=number:st=number... " } ,
{ " dframes " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_PERFILE | OPT_EXPERT | OPT_OUTPUT ,
{ " dframes " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_PERFILE | OPT_EXPERT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_data_frames } ,
" set the number of data frames to output " , " number " } ,
" set the number of data frames to output " , " number " ,
. u1 . name_canon = " frames " } ,
{ " benchmark " , OPT_TYPE_BOOL , OPT_EXPERT ,
{ & do_benchmark } ,
" add timings for benchmarking " } ,
@ -1597,24 +1603,29 @@ const OptionDef options[] = {
{ " copypriorss " , OPT_TYPE_INT , OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( copy_prior_start ) } ,
" copy or discard frames before start time " } ,
{ " frames " , OPT_TYPE_INT64 , OPT_SPEC | OPT_OUTPUT ,
{ " frames " , OPT_TYPE_INT64 , OPT_SPEC | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( max_frames ) } ,
" set the number of frames to output " , " number " } ,
{ " tag " , OPT_TYPE_STRING , OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_INPUT ,
" set the number of frames to output " , " number " ,
. u1 . names_alt = alt_frames , } ,
{ " tag " , OPT_TYPE_STRING , OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_INPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( codec_tags ) } ,
" force codec tag/fourcc " , " fourcc/tag " } ,
{ " q " , OPT_TYPE_DOUBLE , OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
" force codec tag/fourcc " , " fourcc/tag " ,
. u1 . names_alt = alt_tag , } ,
{ " q " , OPT_TYPE_DOUBLE , OPT_EXPERT | OPT_SPEC | OPT_OUTPUT | OPT_HAS_CANON ,
{ . off = OFFSET ( qscale ) } ,
" use fixed quality scale (VBR) " , " q " } ,
{ " qscale " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" use fixed quality scale (VBR) " , " q " ,
. u1 . name_canon = " qscale " , } ,
{ " qscale " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_ALT ,
{ . func_arg = opt_qscale } ,
" use fixed quality scale (VBR) " , " q " } ,
" use fixed quality scale (VBR) " , " q " ,
. u1 . names_alt = alt_qscale , } ,
{ " profile " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
{ . func_arg = opt_profile } ,
" set profile " , " profile " } ,
{ " filter " , OPT_TYPE_STRING , OPT_SPEC | OPT_OUTPUT ,
{ " filter " , OPT_TYPE_STRING , OPT_SPEC | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( filters ) } ,
" set stream filtergraph " , " filter_graph " } ,
" set stream filtergraph " , " filter_graph " ,
. u1 . names_alt = alt_filter , } ,
{ " filter_threads " , OPT_TYPE_FUNC , OPT_FUNC_ARG ,
{ . func_arg = opt_filter_threads } ,
" number of non-complex filter threads " } ,
@ -1695,9 +1706,10 @@ const OptionDef options[] = {
" format of the stats written with -stats_mux_pre " } ,
/* video options */
{ " vframes " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ " vframes " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_video_frames } ,
" set the number of video frames to output " , " number " } ,
" set the number of video frames to output " , " number " ,
. u1 . name_canon = " frames " , } ,
{ " r " , OPT_TYPE_STRING , OPT_VIDEO | OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
{ . off = OFFSET ( frame_rates ) } ,
" set frame rate (Hz value, fraction or abbreviation) " , " rate " } ,
@ -1731,9 +1743,10 @@ const OptionDef options[] = {
{ " rc_override " , OPT_TYPE_STRING , OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( rc_overrides ) } ,
" rate control override for specific intervals " , " override " } ,
{ " vcodec " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT ,
{ " vcodec " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_video_codec } ,
" force video codec ('copy' to copy stream) " , " codec " } ,
" force video codec ('copy' to copy stream) " , " codec " ,
. u1 . name_canon = " codec " , } ,
{ " timecode " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ . func_arg = opt_timecode } ,
" set initial TimeCode value. " , " hh:mm:ss[:;.]ff " } ,
@ -1752,9 +1765,10 @@ const OptionDef options[] = {
{ " vstats_version " , OPT_TYPE_INT , OPT_VIDEO | OPT_EXPERT ,
{ & vstats_version } ,
" Version of the vstats format to use. " } ,
{ " vf " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ " vf " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_video_filters } ,
" set video filters " , " filter_graph " } ,
" set video filters " , " filter_graph " ,
. u1 . name_canon = " filter " , } ,
{ " intra_matrix " , OPT_TYPE_STRING , OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( intra_matrices ) } ,
" specify intra matrix coeffs " , " matrix " } ,
@ -1764,9 +1778,10 @@ const OptionDef options[] = {
{ " chroma_intra_matrix " , OPT_TYPE_STRING , OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( chroma_intra_matrices ) } ,
" specify intra matrix coeffs " , " matrix " } ,
{ " vtag " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT ,
{ " vtag " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_old2new } ,
" force video tag/fourcc " , " fourcc/tag " } ,
" force video tag/fourcc " , " fourcc/tag " ,
. u1 . name_canon = " tag " , } ,
{ " fps_mode " , OPT_TYPE_STRING , OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT ,
{ . off = OFFSET ( fps_mode ) } ,
" set framerate mode for matching video streams; overrides vsync " } ,
@ -1807,9 +1822,10 @@ const OptionDef options[] = {
" random access points " } ,
/* audio options */
{ " aframes " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ " aframes " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_audio_frames } ,
" set the number of audio frames to output " , " number " } ,
" set the number of audio frames to output " , " number " ,
. u1 . name_canon = " frames " , } ,
{ " aq " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ . func_arg = opt_audio_qscale } ,
" set audio quality (codec-specific) " , " quality " , } ,
@ -1822,27 +1838,32 @@ const OptionDef options[] = {
{ " an " , OPT_TYPE_BOOL , OPT_AUDIO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT ,
{ . off = OFFSET ( audio_disable ) } ,
" disable audio " } ,
{ " acodec " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT ,
{ " acodec " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_audio_codec } ,
" force audio codec ('copy' to copy stream) " , " codec " } ,
" force audio codec ('copy' to copy stream) " , " codec " ,
. u1 . name_canon = " codec " , } ,
{ " ab " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
{ . func_arg = opt_bitrate } ,
" audio bitrate (please use -b:a) " , " bitrate " } ,
{ " atag " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
{ " atag " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_old2new } ,
" force audio tag/fourcc " , " fourcc/tag " } ,
" force audio tag/fourcc " , " fourcc/tag " ,
. u1 . name_canon = " tag " , } ,
{ " sample_fmt " , OPT_TYPE_STRING , OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
{ . off = OFFSET ( sample_fmts ) } ,
" set sample format " , " format " } ,
{ " channel_layout " , OPT_TYPE_STRING , OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
{ " channel_layout " , OPT_TYPE_STRING , OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( audio_ch_layouts ) } ,
" set channel layout " , " layout " } ,
{ " ch_layout " , OPT_TYPE_STRING , OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT ,
" set channel layout " , " layout " ,
. u1 . names_alt = alt_channel_layout , } ,
{ " ch_layout " , OPT_TYPE_STRING , OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . off = OFFSET ( audio_ch_layouts ) } ,
" set channel layout " , " layout " } ,
{ " af " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT ,
" set channel layout " , " layout " ,
. u1 . name_canon = " channel_layout " , } ,
{ " af " , OPT_TYPE_FUNC , OPT_AUDIO | OPT_FUNC_ARG | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_audio_filters } ,
" set audio filters " , " filter_graph " } ,
" set audio filters " , " filter_graph " ,
. u1 . name_canon = " filter " , } ,
{ " guess_layout_max " , OPT_TYPE_INT , OPT_AUDIO | OPT_SPEC | OPT_EXPERT | OPT_INPUT ,
{ . off = OFFSET ( guess_layout_max ) } ,
" set the maximum number of channels to try to guess the channel layout " } ,
@ -1851,12 +1872,14 @@ const OptionDef options[] = {
{ " sn " , OPT_TYPE_BOOL , OPT_SUBTITLE | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT ,
{ . off = OFFSET ( subtitle_disable ) } ,
" disable subtitle " } ,
{ " scodec " , OPT_TYPE_FUNC , OPT_SUBTITLE | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT ,
{ " scodec " , OPT_TYPE_FUNC , OPT_SUBTITLE | OPT_FUNC_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_subtitle_codec } ,
" force subtitle codec ('copy' to copy stream) " , " codec " } ,
{ " stag " , OPT_TYPE_FUNC , OPT_SUBTITLE | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" force subtitle codec ('copy' to copy stream) " , " codec " ,
. u1 . name_canon = " codec " , } ,
{ " stag " , OPT_TYPE_FUNC , OPT_SUBTITLE | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_old2new }
, " force subtitle tag/fourcc " , " fourcc/tag " } ,
, " force subtitle tag/fourcc " , " fourcc/tag " ,
. u1 . name_canon = " tag " } ,
{ " fix_sub_duration " , OPT_TYPE_BOOL , OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT ,
{ . off = OFFSET ( fix_sub_duration ) } ,
" fix subtitles duration " } ,
@ -1885,28 +1908,35 @@ const OptionDef options[] = {
" 0 = use frame rate (video) or sample rate (audio), "
" -1 = match source time base " , " ratio " } ,
{ " bsf " , OPT_TYPE_STRING , OPT_SPEC | OPT_EXPERT | OPT_OUTPUT ,
{ " bsf " , OPT_TYPE_STRING , OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_HAS_ALT ,
{ . off = OFFSET ( bitstream_filters ) } ,
" A comma-separated list of bitstream filters " , " bitstream_filters " } ,
{ " absf " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_AUDIO | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" A comma-separated list of bitstream filters " , " bitstream_filters " ,
. u1 . names_alt = alt_bsf , } ,
{ " absf " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_AUDIO | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_old2new } ,
" deprecated " , " audio bitstream_filters " } ,
{ " vbsf " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" deprecated " , " audio bitstream_filters " ,
. u1 . name_canon = " bsf " , } ,
{ " vbsf " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_old2new } ,
" deprecated " , " video bitstream_filters " } ,
" deprecated " , " video bitstream_filters " ,
. u1 . name_canon = " bsf " , } ,
{ " apre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_AUDIO | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
{ " apre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_AUDIO | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_preset } ,
" set the audio options to the indicated preset " , " preset " } ,
{ " vpre " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" set the audio options to the indicated preset " , " preset " ,
. u1 . name_canon = " pre " , } ,
{ " vpre " , OPT_TYPE_FUNC , OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_preset } ,
" set the video options to the indicated preset " , " preset " } ,
{ " spre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_SUBTITLE | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" set the video options to the indicated preset " , " preset " ,
. u1 . name_canon = " pre " , } ,
{ " spre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_SUBTITLE | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_preset } ,
" set the subtitle options to the indicated preset " , " preset " } ,
{ " fpre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT ,
" set the subtitle options to the indicated preset " , " preset " ,
. u1 . name_canon = " pre " , } ,
{ " fpre " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_preset } ,
" set options from indicated preset file " , " filename " } ,
" set options from indicated preset file " , " filename " ,
. u1 . name_canon = " pre " , } ,
{ " max_muxing_queue_size " , OPT_TYPE_INT , OPT_SPEC | OPT_EXPERT | OPT_OUTPUT ,
{ . off = OFFSET ( max_muxing_queue_size ) } ,
@ -1916,9 +1946,10 @@ const OptionDef options[] = {
" set the threshold after which max_muxing_queue_size is taken into account " , " bytes " } ,
/* data codec support */
{ " dcodec " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT ,
{ " dcodec " , OPT_TYPE_FUNC , OPT_FUNC_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT | OPT_HAS_CANON ,
{ . func_arg = opt_data_codec } ,
" force data codec ('copy' to copy stream) " , " codec " } ,
" force data codec ('copy' to copy stream) " , " codec " ,
. u1 . name_canon = " codec " , } ,
{ " dn " , OPT_TYPE_BOOL , OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT ,
{ . off = OFFSET ( data_disable ) } , " disable data " } ,