Merge commit 'c661cb6672af5ebcb900ec8766b24761bd2ab011'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 20 Dec 2012 11:06:15 +0000 (12:06 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 20 Dec 2012 11:06:15 +0000 (12:06 +0100)
* 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>
cmdutils.c
cmdutils.h
ffmpeg_opt.c
libavcodec/h264_ps.c
libavformat/isom.c
libavformat/mov.c

index 31c6ad6..666b039 100644 (file)
@@ -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",
index 43cb6a0..f193132 100644 (file)
@@ -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.
index c5e8e62..a57c885 100644 (file)
@@ -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;
index 4b81c98..a68645b 100644 (file)
@@ -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);
index 9c10e75..b252e78 100644 (file)
@@ -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') },
index 715e200..a7f6494 100644 (file)
@@ -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 */