diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-12-20 12:06:15 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-12-20 12:06:15 +0100 |
commit | 40ea3438661e6cc30b60bc019ae01fb073eabb35 (patch) | |
tree | 618cba03caedda423e3c34f9bd463afcd94f0800 | |
parent | 174c483e2e751c71ca9ae4e9ca33082bbb1eea56 (diff) | |
parent | c661cb6672af5ebcb900ec8766b24761bd2ab011 (diff) | |
download | ffmpeg-40ea3438661e6cc30b60bc019ae01fb073eabb35.tar.gz |
Merge commit 'c661cb6672af5ebcb900ec8766b24761bd2ab011'
* commit 'c661cb6672af5ebcb900ec8766b24761bd2ab011':
cmdutils: pass number of groups to split_commandline().
mov: handle h263 and flv1 for codec_tag 'H','2','6','3'
h264: fix sps parsing for SVC and CAVLC 4:4:4 Intra profiles
Conflicts:
libavcodec/h264_ps.c
libavformat/isom.c
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | cmdutils.c | 24 | ||||
-rw-r--r-- | cmdutils.h | 2 | ||||
-rw-r--r-- | ffmpeg_opt.c | 4 | ||||
-rw-r--r-- | libavcodec/h264_ps.c | 9 | ||||
-rw-r--r-- | libavformat/isom.c | 2 | ||||
-rw-r--r-- | libavformat/mov.c | 10 |
6 files changed, 25 insertions, 26 deletions
diff --git a/cmdutils.c b/cmdutils.c index 31c6ad618a..666b0394e4 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -537,14 +537,15 @@ int opt_default(void *optctx, const char *opt, const char *arg) * * @return index of the group definition that matched or -1 if none */ -static int match_group_separator(const OptionGroupDef *groups, const char *opt) +static int match_group_separator(const OptionGroupDef *groups, int nb_groups, + const char *opt) { - const OptionGroupDef *p = groups; + int i; - while (p->name) { + for (i = 0; i < nb_groups; i++) { + const OptionGroupDef *p = &groups[i]; if (p->sep && !strcmp(p->sep, opt)) - return p - groups; - p++; + return i; } return -1; @@ -602,17 +603,14 @@ static void add_opt(OptionParseContext *octx, const OptionDef *opt, } static void init_parse_context(OptionParseContext *octx, - const OptionGroupDef *groups) + const OptionGroupDef *groups, int nb_groups) { static const OptionGroupDef global_group = { "global" }; - const OptionGroupDef *g = groups; int i; memset(octx, 0, sizeof(*octx)); - while (g->name) - g++; - octx->nb_groups = g - groups; + octx->nb_groups = nb_groups; octx->groups = av_mallocz(sizeof(*octx->groups) * octx->nb_groups); if (!octx->groups) exit(1); @@ -655,14 +653,14 @@ void uninit_parse_context(OptionParseContext *octx) int split_commandline(OptionParseContext *octx, int argc, char *argv[], const OptionDef *options, - const OptionGroupDef *groups) + const OptionGroupDef *groups, int nb_groups) { int optindex = 1; /* perform system-dependent conversions for arguments list */ prepare_app_arguments(&argc, &argv); - init_parse_context(octx, groups); + init_parse_context(octx, groups, nb_groups); av_log(NULL, AV_LOG_DEBUG, "Splitting the commandline.\n"); while (optindex < argc) { @@ -690,7 +688,7 @@ do { \ } while (0) /* named group separators, e.g. -i */ - if ((ret = match_group_separator(groups, opt)) >= 0) { + if ((ret = match_group_separator(groups, nb_groups, opt)) >= 0) { GET_ARG(arg); finish_group(octx, ret, arg); av_log(NULL, AV_LOG_DEBUG, " matched as %s with argument '%s'.\n", diff --git a/cmdutils.h b/cmdutils.h index 43cb6a09d9..f193132f09 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -305,7 +305,7 @@ int parse_optgroup(void *optctx, OptionGroup *g); */ int split_commandline(OptionParseContext *octx, int argc, char *argv[], const OptionDef *options, - const OptionGroupDef *groups); + const OptionGroupDef *groups, int nb_groups); /** * Free all allocated memory in an OptionParseContext. diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index c5e8e62d7c..a57c88515d 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -2266,7 +2266,6 @@ enum OptGroup { static const OptionGroupDef groups[] = { [GROUP_OUTFILE] = { "output file", NULL }, [GROUP_INFILE] = { "input file", "i" }, - { 0 }, }; static int open_files(OptionGroupList *l, const char *inout, @@ -2311,7 +2310,8 @@ int ffmpeg_parse_options(int argc, char **argv) memset(&octx, 0, sizeof(octx)); /* split the commandline into an internal representation */ - ret = split_commandline(&octx, argc, argv, options, groups); + ret = split_commandline(&octx, argc, argv, options, groups, + FF_ARRAY_ELEMS(groups)); if (ret < 0) { av_log(NULL, AV_LOG_FATAL, "Error splitting the argument list: "); goto fail; diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 4b81c9877d..a68645bc36 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -367,10 +367,11 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){ sps->scaling_matrix_present = 0; sps->colorspace = 2; //AVCOL_SPC_UNSPECIFIED - if(sps->profile_idc == 100 || sps->profile_idc == 110 || - sps->profile_idc == 122 || sps->profile_idc == 244 || sps->profile_idc == 44 || - sps->profile_idc == 83 || sps->profile_idc == 86 || sps->profile_idc == 118 || - sps->profile_idc == 128 || sps->profile_idc == 144) { + if (sps->profile_idc == 100 || sps->profile_idc == 110 || + sps->profile_idc == 122 || sps->profile_idc == 244 || + sps->profile_idc == 44 || sps->profile_idc == 83 || + sps->profile_idc == 86 || sps->profile_idc == 118 || + sps->profile_idc == 128 || sps->profile_idc == 144) { sps->chroma_format_idc= get_ue_golomb_31(&s->gb); if (sps->chroma_format_idc > 3U) { av_log(h->s.avctx, AV_LOG_ERROR, "chroma_format_idc %d is illegal\n", sps->chroma_format_idc); diff --git a/libavformat/isom.c b/libavformat/isom.c index 9c10e755ff..b252e78383 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -228,7 +228,7 @@ const AVCodecTag ff_codec_movvideo_tags[] = { { AV_CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') }, { AV_CODEC_ID_DNXHD, MKTAG('A', 'V', 'd', 'n') }, /* AVID DNxHD */ -// { AV_CODEC_ID_FLV1, MKTAG('H', '2', '6', '3') }, /* Flash Media Server, forced in demuxer */ + { AV_CODEC_ID_H263, MKTAG('H', '2', '6', '3') }, { AV_CODEC_ID_MSMPEG4V3, MKTAG('3', 'I', 'V', 'D') }, /* 3ivx DivX Doctor */ { AV_CODEC_ID_RAWVIDEO, MKTAG('A', 'V', '1', 'x') }, /* AVID 1:1x */ { AV_CODEC_ID_RAWVIDEO, MKTAG('A', 'V', 'u', 'p') }, diff --git a/libavformat/mov.c b/libavformat/mov.c index 715e20039d..a7f64940aa 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1276,6 +1276,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) int color_greyscale; int color_table_id; + st->codec->codec_id = id; avio_rb16(pb); /* version */ avio_rb16(pb); /* revision level */ avio_rb32(pb); /* vendor */ @@ -1299,11 +1300,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) /* codec_tag YV12 triggers an UV swap in rawdec.c */ if (!memcmp(st->codec->codec_name, "Planar Y'CbCr 8-bit 4:2:0", 25)) st->codec->codec_tag=MKTAG('I', '4', '2', '0'); - /* Flash Media Server streams files with Sorenson Spark and tag H263 */ - if (!memcmp(st->codec->codec_name, "Sorenson H263", 13) - && format == MKTAG('H','2','6','3')) - id = AV_CODEC_ID_FLV1; - st->codec->codec_id = id; + /* Flash Media Server uses tag H263 with Sorenson Spark */ + if (format == MKTAG('H','2','6','3') && + !memcmp(st->codec->codec_name, "Sorenson H263", 13)) + st->codec->codec_id = AV_CODEC_ID_FLV1; st->codec->bits_per_coded_sample = avio_rb16(pb); /* depth */ color_table_id = avio_rb16(pb); /* colortable id */ |