Outdated patch. See [PATCH 4/4] under '[PATCH 0/4] Support for HDMV
Interactive Graphics Stream' stream.

Sorry,
David

Le vendredi 01 juin 2012 à 17:12 +0200, David Girault a écrit :
> These changes add support for copying overlay streams.
> So to extract IGS menu from m2ts file:
> $ avconv -i source.m2ts -vn -an -sn output.mnu
> 
> To mux IGS menu with h264 video in ts:
> $ avconv -i video.264 -i test.mnu -f mpegts out.ts
> 
> Todo: update mpegts muxer to set correct PID so
> output may be compatible to BDAV format.
> 
> Signed-off-by: David Girault <[email protected]>
> ---
>  avconv.c   |   26 ++++++++++++++++++++++++++
>  cmdutils.h |    1 +
>  2 files changed, 27 insertions(+)
> 
> diff --git a/avconv.c b/avconv.c
> index cbf66c4..2ea1224 100644
> --- a/avconv.c
> +++ b/avconv.c
> @@ -354,6 +354,7 @@ typedef struct OptionsContext {
>      int video_disable;
>      int audio_disable;
>      int subtitle_disable;
> +    int overlay_disable;
>      int data_disable;
>  
>      /* indexed by output file stream index */
> @@ -2581,6 +2582,7 @@ static int transcode_init(void)
>                  codec->width  = icodec->width;
>                  codec->height = icodec->height;
>                  break;
> +            case AVMEDIA_TYPE_OVERLAY:
>              case AVMEDIA_TYPE_DATA:
>              case AVMEDIA_TYPE_ATTACHMENT:
>                  break;
> @@ -3426,6 +3428,7 @@ static void add_input_streams(OptionsContext *o, 
> AVFormatContext *ic)
>          case AVMEDIA_TYPE_DATA:
>          case AVMEDIA_TYPE_SUBTITLE:
>          case AVMEDIA_TYPE_ATTACHMENT:
> +        case AVMEDIA_TYPE_OVERLAY:
>          case AVMEDIA_TYPE_UNKNOWN:
>              break;
>          default:
> @@ -4017,6 +4020,15 @@ static OutputStream 
> *new_subtitle_stream(OptionsContext *o, AVFormatContext *oc)
>      return ost;
>  }
>  
> +static OutputStream *new_overlay_stream(OptionsContext *o, AVFormatContext 
> *oc)
> +{
> +    OutputStream *ost;
> +
> +    ost = new_output_stream(o, oc, AVMEDIA_TYPE_OVERLAY);
> +    ost->stream_copy = 1;
> +    return ost;
> +}
> +
>  /* arg format is "output-stream-index:streamid-value". */
>  static int opt_streamid(OptionsContext *o, const char *opt, const char *arg)
>  {
> @@ -4167,6 +4179,7 @@ static void opt_output_file(void *optctx, const char 
> *filename)
>              case AVMEDIA_TYPE_VIDEO:    o->video_disable    = 1; break;
>              case AVMEDIA_TYPE_AUDIO:    o->audio_disable    = 1; break;
>              case AVMEDIA_TYPE_SUBTITLE: o->subtitle_disable = 1; break;
> +            case AVMEDIA_TYPE_OVERLAY:  o->overlay_disable = 1; break;
>              }
>              init_output_filter(ofilter, o, oc);
>          }
> @@ -4219,6 +4232,15 @@ static void opt_output_file(void *optctx, const char 
> *filename)
>                      break;
>                  }
>          }
> +
> +        /* overlay: pick first */
> +        if (!o->overlay_disable && oc->oformat->overlay_codec != 
> CODEC_ID_NONE) {
> +            for (i = 0; i < nb_input_streams; i++)
> +                if (input_streams[i]->st->codec->codec_type == 
> AVMEDIA_TYPE_OVERLAY) {
> +                    NEW_STREAM(overlay, i);
> +                    break;
> +                }
> +        }
>          /* do something with data? */
>      } else {
>          for (i = 0; i < o->nb_stream_maps; i++) {
> @@ -4256,6 +4278,7 @@ loop_end:
>                  case AVMEDIA_TYPE_AUDIO:    ost = new_audio_stream(o, oc);   
>  break;
>                  case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(o, 
> oc); break;
>                  case AVMEDIA_TYPE_DATA:     ost = new_data_stream(o, oc);    
>  break;
> +                case AVMEDIA_TYPE_OVERLAY:  ost = new_overlay_stream(o, oc); 
>     break;
>                  case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, 
> oc); break;
>                  default:
>                      av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - 
> unsupported type.\n",
> @@ -4907,6 +4930,9 @@ static const OptionDef options[] = {
>      { "scodec", HAS_ARG | OPT_SUBTITLE | OPT_FUNC2, 
> {(void*)opt_subtitle_codec}, "force subtitle codec ('copy' to copy stream)", 
> "codec" },
>      { "stag", HAS_ARG | OPT_EXPERT | OPT_SUBTITLE | OPT_FUNC2, 
> {(void*)opt_subtitle_tag}, "force subtitle tag/fourcc", "fourcc/tag" },
>  
> +    /* overlay options */
> +    { "on", OPT_BOOL | OPT_OVERLAY | OPT_OFFSET, {.off = 
> OFFSET(overlay_disable)}, "disable overlay" },
> +
>      /* grab options */
>      { "isync", OPT_BOOL | OPT_EXPERT | OPT_GRAB, {(void*)&input_sync}, "sync 
> read on input", "" },
>  
> diff --git a/cmdutils.h b/cmdutils.h
> index 6fff47d..e69f5ec 100644
> --- a/cmdutils.h
> +++ b/cmdutils.h
> @@ -144,6 +144,7 @@ typedef struct {
>                                     an int containing element count in the 
> array. */
>  #define OPT_TIME  0x10000
>  #define OPT_DOUBLE 0x20000
> +#define OPT_OVERLAY 0x40000
>       union {
>          void *dst_ptr;
>          int (*func_arg)(const char *, const char *);


_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to