[FFmpeg-devel] [PATCH V5 1/2] configure: sort decoder/encoder/filter/... names in alphabet order

Alexander Strasser eclipse7 at gmx.net
Sun Apr 28 18:28:49 EEST 2019


On 2019-04-28 07:42 +0000, Guo, Yejun wrote:
> > -----Original Message-----
> > From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On Behalf Of
> > Alexander Strasser
> > Sent: Sunday, April 28, 2019 9:18 AM
> > To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> > Subject: Re: [FFmpeg-devel] [PATCH V5 1/2] configure: sort
> > decoder/encoder/filter/... names in alphabet order
> >
> >
> > What do you think about using awk instead of shell?
> >
> > I have 2 POC patches attached. It's probably not 100% correct yet,
> > but it kind of demonstrates what it would look like.
> >
> > The main advantage of using awk, is that it's more elegant and
> > shorter. It's probably also less risky, because it's more isolated,
> > e.g. as it was explained by avih, there is no widely supported way
> > for locals across shells. We already use awk in configure for
> > mandatory functions, so it's no new dependency.
> >
> > Please comment on the awk approach.
>

> I did some change to make it correct on ubuntu 16.04, but looks issue on windows mingw.
>
> print_in_columns() {
>     sort | tr '\n' ' ' | awk -v width="$ncols" '
>     {
>         #add int()
>         num_cols = int(width / 24); num_rows = int((NF + num_cols-1) / num_cols);

The added int() calls looks right.


>         y = x = 1;
>         for (i = 1; i <= NF; i++) {
>             if (y > num_rows) {
>                 y = 1; x++;
>             }
>             d[x,y] = $i;
>             y++;
>         }
>
> 		print width
> 		print num_cols
> 		print num_rows
> 		print NF
>
>         for (y = 1; y <= num_rows; y++) {
>             for (x = 1; x <= num_cols; x++) {
>                 # it does not work for the case that the last column is not fully filled
>                 #line = sprintf(x != num_cols ? "%s%-24s" : "%s%s", line, d[x,y]);
>                 line = sprintf("%s%-24s", line, d[x,y]);

You mean it doesn't work in the way that there will be trailing spaces
in the column before the last one which is partially empty, right?

But the output looked right and there were never trailing spaces in the
last column, right?

BTW I changed the algorithm here, because I thought it might be easier
to unterstand. I will also try the algorithm, you implemented in shell.


>             }
>             print line;
>             line = "";
>         }
>     }' | sed 's/ *$//'
> }
>
> on ubuntu 16.04, the output is:
> Enabled bsfs:
> 135
> 5
> 7
> 33
> aac_adtstoasc           extract_extradata       hevc_mp4toannexb        mpeg4_unpack_bframes    truehd_core
> av1_frame_split         filter_units            imx_dump_header         noise                   vp9_metadata
> av1_metadata            h264_metadata           mjpeg2jpeg              null                    vp9_raw_reorder
> chomp                   h264_mp4toannexb        mjpega_dump_header      prores_metadata         vp9_superframe
> dca_core                h264_redundant_pps      mov2textsub             remove_extradata        vp9_superframe_split
> dump_extradata          hapqa_extract           mp3_header_decompress   text2movsub
> eac3_core               hevc_metadata           mpeg2_metadata          trace_headers
>
> while on windows, the output is:
> Enabled bsfs:
> 72
> 3
> 11
> 33
>      noiseh264_redundant_pps
>           nullextract
>           prores_metadata
>        remove_extradatamp4toannexb
>         text2movsubdump_header
>              trace_headers
>      truehd_corepega_dump_header
>             vp9_metadata
>   vp9_raw_reorderader_decompress
>          vp9_superframea
>    vp9_superframe_splitames

Wild guess: CR LF line endings are emitted somewhere and the CRs stay in
the input. Your terminal resets the cursor to the start of the line when
interpreting the midline CRs.

Does it work if you extend the tr in print_in_columns like below?

     sort | tr '\r\n' '  ' | awk -v width="$ncols" '


> I did a quick check, but has not found the root cause yet.
>
>
> >
> > I'm not against the shell way, or a mixed approach, but before going
> > either way and pushing I would rather have some more testing;
> > especially on more exotic platforms.

Thanks for testing and looking into it!

  Alexander


More information about the ffmpeg-devel mailing list