On 02/07/14 19:23, Luca Barbato wrote:
> ---
> libavformat/movenc.c | 57
> +++++++++++++++++++++++++++++++++++++++++++---------
> 1 file changed, 47 insertions(+), 10 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index f5c36fc..713949a 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1314,11 +1314,16 @@ static int mov_write_hdlr_tag(AVIOContext *pb,
> MOVTrack *track)
> const char *hdlr, *descr = NULL, *hdlr_type = NULL;
> int64_t pos = avio_tell(pb);
>
> + uint32_t flags = 0, mask = 0;
> +
> hdlr = "dhlr";
> hdlr_type = "url ";
> descr = "DataHandler";
>
> if (track) {
> + AVStream *st = track->st;
> + AVDictionaryEntry *tag;
> +
> hdlr = (track->mode == MODE_MOV) ? "mhlr" : "\0\0\0\0";
> if (track->enc->codec_type == AVMEDIA_TYPE_VIDEO) {
> hdlr_type = "vide";
> @@ -1352,6 +1357,13 @@ static int mov_write_hdlr_tag(AVIOContext *pb,
> MOVTrack *track)
> "Unknown hldr_type for %s / 0x%04X, writing dummy
> values\n",
> tag_buf, track->enc->codec_tag);
> }
> + tag = av_dict_get(st->metadata, "mov-component-flags", NULL, 0);
> + if (tag)
> + flags = atoi(tag->value);
> +
> + tag = av_dict_get(st->metadata, "mov-component-mask", NULL, 0);
> + if (tag)
> + mask = atoi(tag->value);
> }
>
> avio_wb32(pb, 0); /* size */
> @@ -1360,8 +1372,8 @@ static int mov_write_hdlr_tag(AVIOContext *pb, MOVTrack
> *track)
> avio_write(pb, hdlr, 4); /* handler */
> ffio_wfourcc(pb, hdlr_type); /* handler type */
> avio_wb32(pb, 0); /* reserved */
> - avio_wb32(pb, 0); /* reserved */
> - avio_wb32(pb, 0); /* reserved */
> + avio_wb32(pb, flags);
> + avio_wb32(pb, mask);
> if (!track || track->mode == MODE_MOV)
> avio_w8(pb, strlen(descr)); /* pascal string */
> avio_write(pb, descr, strlen(descr)); /* handler description */
> @@ -1464,6 +1476,12 @@ static int mov_write_tkhd_tag(AVIOContext *pb,
> MOVTrack *track, AVStream *st)
> int64_t duration = av_rescale_rnd(track->track_duration, MOV_TIMESCALE,
> track->timescale, AV_ROUND_UP);
> int version = duration < INT32_MAX ? 0 : 1;
> + int flags = (track->flags & MOV_TRACK_ENABLED) ?
> + MOV_TKHD_FLAG_ENABLED | MOV_TKHD_FLAG_IN_MOVIE :
> + MOV_TKHD_FLAG_IN_MOVIE;
> + int group = st ? st->codec->codec_type : 0;
> +
> + AVDictionaryEntry *tag;
>
> if (track->mode == MODE_ISM)
> version = 1;
> @@ -1471,9 +1489,13 @@ static int mov_write_tkhd_tag(AVIOContext *pb,
> MOVTrack *track, AVStream *st)
> (version == 1) ? avio_wb32(pb, 104) : avio_wb32(pb, 92); /* size */
> ffio_wfourcc(pb, "tkhd");
> avio_w8(pb, version);
> - avio_wb24(pb, (track->flags & MOV_TRACK_ENABLED) ?
> - MOV_TKHD_FLAG_ENABLED | MOV_TKHD_FLAG_IN_MOVIE :
> - MOV_TKHD_FLAG_IN_MOVIE);
> +
> + tag = av_dict_get(st->metadata, "mov-flags", NULL, 0);
> + if (tag)
> + flags = atoi(tag->value);
> +
> + avio_wb24(pb, flags);
> +
> if (version == 1) {
> avio_wb64(pb, track->time);
> avio_wb64(pb, track->time);
> @@ -1490,13 +1512,28 @@ static int mov_write_tkhd_tag(AVIOContext *pb,
> MOVTrack *track, AVStream *st)
>
> avio_wb32(pb, 0); /* reserved */
> avio_wb32(pb, 0); /* reserved */
> - avio_wb16(pb, 0); /* layer */
> - avio_wb16(pb, st ? st->codec->codec_type : 0); /* alternate group) */
> - /* Volume, only for audio */
> - if (track->enc->codec_type == AVMEDIA_TYPE_AUDIO)
> - avio_wb16(pb, 0x0100);
> + tag = av_dict_get(st->metadata, "mov-layer", NULL, 0);
> + if (tag)
> + avio_wb16(pb, atoi(tag->value)); /* layer */
> else
> + avio_wb16(pb, 0); /* layer */
> +
> + tag = av_dict_get(st->metadata, "mov-alternate-group", NULL, 0);
> + if (tag)
> + group = atoi(tag->value);
> + group = st->index;
This is a stray change while testing some groupings variants in a lazy way.
> + avio_wb16(pb, group); /* alternate group) */
> +
> + /* Volume, only for audio */
> + if (track->enc->codec_type == AVMEDIA_TYPE_AUDIO) {
> + tag = av_dict_get(st->metadata, "mov-volume", NULL, 0);
> + if (tag)
> + avio_wb16(pb, atoi(tag->value));
> + else
> + avio_wb16(pb, 0x0100);
> + } else {
> avio_wb16(pb, 0);
> + }
> avio_wb16(pb, 0); /* reserved */
>
> /* Matrix structure */
>
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel