On 2019-04-28 07:42 +0000, Guo, Yejun wrote: > > -----Original Message----- > > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of > > Alexander Strasser > > Sent: Sunday, April 28, 2019 9:18 AM > > To: FFmpeg development discussions and patches <ffmpeg-devel@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".