-
Notifications
You must be signed in to change notification settings - Fork 208
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Treat avifenc --stdin as regular file input arg #2574
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,7 +37,9 @@ OUT_MSG="avif_test_cmd_out_msg.txt" | |
# Cleanup | ||
cleanup() { | ||
pushd ${TMP_DIR} | ||
rm -f -- "${ENCODED_FILE}" "${ENCODED_FILE_WITH_DASH}" "${DECODED_FILE}" "${OUT_MSG}" | ||
rm -f -- "${ENCODED_FILE}" "${ENCODED_UTF8_FILE}" "${ENCODED_FILE_REFERENCE}" \ | ||
"${ENCODED_FILE_WITH_DASH}" "${DECODED_FILE}" "${DECODED_UTF8_FILE}" \ | ||
"${OUT_MSG}" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Optional: Move this unrelated bug fix to its own pull request. |
||
popd | ||
} | ||
trap cleanup EXIT | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
#!/bin/bash | ||
# Copyright 2025 Google LLC | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
source $(dirname "$0")/cmd_test_common.sh | ||
|
||
# Input file paths. | ||
INPUT_Y4M_STILL="${TESTDATA_DIR}/kodim03_yuv420_8bpc.y4m" | ||
INPUT_Y4M_ANIMATED="${TESTDATA_DIR}/webp_logo_animated.y4m" | ||
# Output file names. | ||
ENCODED_FILE_REGULAR="avif_test_cmd_stdin_encoded.avif" | ||
ENCODED_FILE_STDIN="avif_test_cmd_stdin_encoded_with_stdin.avif" | ||
|
||
# Cleanup | ||
cleanup() { | ||
pushd ${TMP_DIR} | ||
rm -f -- "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
popd | ||
} | ||
trap cleanup EXIT | ||
|
||
strip_header_if() { | ||
FILE="$1" | ||
STRIP_HEADER="$2" | ||
|
||
if ${STRIP_HEADER}; then | ||
# The following does not work on all platforms: | ||
# grep --text mdat "${FILE}" | ||
# awk -b -v RS='mdat' '{print length($0); exit}' "${FILE}" | ||
# Hence the hardcoded variable below. | ||
MDAT_OFFSET=1061 | ||
FILE_CONTENTS_AFTER_HEADER=$(tail -c +${MDAT_OFFSET} < "${FILE}") | ||
echo "${FILE_CONTENTS_AFTER_HEADER}" > "${FILE}" | ||
fi | ||
} | ||
|
||
test_stdin() { | ||
INPUT_Y4M="$1" | ||
STRIP_HEADER="$2" | ||
|
||
# Make sure that --stdin can be replaced with a file path and that it leads to | ||
# the same encoded bytes. | ||
|
||
"${AVIFENC}" -s 8 -o "${ENCODED_FILE_REGULAR}" "${INPUT_Y4M}" | ||
"${AVIFENC}" -s 8 -o "${ENCODED_FILE_STDIN}" --stdin < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_REGULAR}" ${STRIP_HEADER} | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
|
||
"${AVIFENC}" -s 9 "${INPUT_Y4M}" -o "${ENCODED_FILE_REGULAR}" | ||
"${AVIFENC}" -s 9 --stdin -o "${ENCODED_FILE_STDIN}" < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_REGULAR}" ${STRIP_HEADER} | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
|
||
"${AVIFENC}" -s 10 "${INPUT_Y4M}" "${ENCODED_FILE_REGULAR}" | ||
"${AVIFENC}" -s 10 --stdin "${ENCODED_FILE_STDIN}" < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_REGULAR}" ${STRIP_HEADER} | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
"${AVIFENC}" -s 10 "${ENCODED_FILE_STDIN}" --stdin < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
|
||
"${AVIFENC}" -s 10 "${INPUT_Y4M}" -q 90 "${ENCODED_FILE_REGULAR}" | ||
"${AVIFENC}" -s 10 --stdin -q 90 "${ENCODED_FILE_STDIN}" < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_REGULAR}" ${STRIP_HEADER} | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
"${AVIFENC}" -s 10 "${ENCODED_FILE_STDIN}" -q 90 --stdin < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
"${AVIFENC}" -s 10 --stdin "${ENCODED_FILE_STDIN}" -q 90 < "${INPUT_Y4M}" | ||
strip_header_if "${ENCODED_FILE_STDIN}" ${STRIP_HEADER} | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" | ||
|
||
# Negative tests. | ||
|
||
# WARNING: Trailing options with update suffix has no effect. Place them before the input you intend to apply to. | ||
"${AVIFENC}" -s 10 --stdin "${ENCODED_FILE_STDIN}" -q:u 90 < "${INPUT_Y4M}" | ||
cmp --silent "${ENCODED_FILE_REGULAR}" "${ENCODED_FILE_STDIN}" && exit 1 | ||
|
||
# ERROR: there cannot be any other input if --stdin is specified | ||
"${AVIFENC}" --stdin && exit 1 | ||
"${AVIFENC}" --stdin "${ENCODED_FILE_STDIN}" "${ENCODED_FILE_STDIN}" && exit 1 | ||
"${AVIFENC}" "${ENCODED_FILE_STDIN}" --stdin "${ENCODED_FILE_STDIN}" && exit 1 | ||
"${AVIFENC}" "${ENCODED_FILE_STDIN}" "${ENCODED_FILE_STDIN}" --stdin && exit 1 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: In these three lines (96-98), use different input and output filenames to make the tests more realistic. I.e., replace the first "${ENCODED_FILE_STDIN}" with "${INPUT_Y4M}". Note: The input file should exist so that these three avifenc command lines succeed if
|
||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is trailing whitespace in this line. |
||
return 0 | ||
} | ||
|
||
pushd ${TMP_DIR} | ||
test_stdin "${INPUT_Y4M_STILL}" false | ||
|
||
# The output of avifenc for animations is not deterministic because of boxes | ||
# such as mvhd and its field creation_time. Strip the whole header to compare | ||
# only the encoded samples. | ||
test_stdin "${INPUT_Y4M_ANIMATED}" true | ||
popd | ||
|
||
exit 0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't read the pull request. I have a question: where is the position of this fictitious file path argument?
Here is my expectation:
-o
option, the fictitious input file path argument is right before the output file path argument.-o
option is used, the fictitious input file path argument is at the end of the command line.Is this what you implemented?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have now read the pull request. What you implemented is not exactly the same as what I expected in how the options with update suffix (i.e.,
pendingSettings
) are handled. This is perfectly fine because there are several reasonable ways to handle this. Since people's expectations may be different from what is implemented, it would be good to document somewhere how we handle the options with update suffix when--stdin
is specified.