On 08/03/15 23:30, Martin Storsjö wrote:
> On Sat, 7 Mar 2015, Martin Storsjö wrote:
> 
>> ---
>> libavformat/movenc.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>> index 122bc2d..67c7214 100644
>> --- a/libavformat/movenc.c
>> +++ b/libavformat/movenc.c
>> @@ -2490,7 +2490,8 @@ static int mov_write_trun_tag(AVIOContext *pb,
>> MOVMuxContext *mov,
>>         if (i > 0 && get_sample_flags(track, &track->cluster[i]) !=
>> track->default_sample_flags)
>>             flags |= MOV_TRUN_SAMPLE_FLAGS;
>>     }
>> -    if (!(flags & MOV_TRUN_SAMPLE_FLAGS))
>> +    if (!(flags & MOV_TRUN_SAMPLE_FLAGS) && track->entry > 0 &&
>> +         get_sample_flags(track, &track->cluster[0]) !=
>> track->default_sample_flags)
>>         flags |= MOV_TRUN_FIRST_SAMPLE_FLAGS;
>>     if (track->flags & MOV_TRACK_CTTS)
>>         flags |= MOV_TRUN_SAMPLE_CTS;
>> -- 
>> 1.9.3 (Apple Git-50)
> 
> This should also be a pretty straightforward patch, potentially saving
> some bytes per fragment.
> 
> Background for people unfamiliar with this format: The "flags" field
> contains flags based on the keyframe flag, different flags for audio and
> video samples. The tfhd atom contains one "default" value. If all
> samples have the same flags, they don't need to be written out
> explicitly per sample, if the default value is the right one. (Patch 1/4
> sets this default to a smarter value.) If the first sample has got
> different flags than the rest (but all the other ones have the default
> flags), we can set that one separately. And if all samples really have
> the same flags, we don't need to set the first sample flags separately
> either.
> 
> E.g., a video fragment where the first sample is a keyframe, and the
> rest are P-frames:
> 
> tfhd: default = non-sync sample
> trun: separate flags for first sample
>       flags for first sample = sync sample
> 
> Audio fragment, keyframe flag set on all samples:
> tfhd: default = sync sample
> trun: no extra flags for first sample
> 
> Prior to patch 1/4, if one muxes audio packets without the keyframe flag
> set, it'd look like this:
> 
> tfhd: default = sync sample
> trun: flags per sample
>       sample 1: non-sync
>       sample 2: non-sync
>   ... sample N: non-sync
> 
> After patch 1/4, this instead would be:
> 
> tfhd: default = non-sync
> trun: separate flags for first sample
>       first sample flags = non-sync
> 
> After patch 2/4, this would be:
> 
> tfhd: default = non-sync
> trun: no flags per packet, no separate flags for first packet
> 

Thanks for the explanation =)

Patch ok.

lu

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

Reply via email to