Compare commits

..

840 Commits

Author SHA1 Message Date
sijchen
ef5f1c46b9 Merge pull request #1655 from sijchen/docx
add release note for preparation of v1.3.0
2014-12-19 14:43:59 +08:00
Sijia Chen
7d8bb6f290 add release note for preparation of v1.3.0 2014-12-19 14:10:39 +08:00
dongzha
809adc4129 Merge pull request #1654 from syureyi/newest
maintain codec demo
2014-12-19 14:05:07 +08:00
zhuiling
f0934c7bf3 maintain codec demo 2014-12-19 13:53:29 +08:00
sijchen
c3de0f99c5 Merge pull request #1653 from ruil2/framerate
remove macro definition to the header file
2014-12-19 13:27:52 +08:00
ruil2
3ae2507c99 remove macro definition to the header file 2014-12-19 10:53:06 +08:00
HaiboZhu
afd82b2cfa Merge pull request #1652 from huili2/newseq_bugfix
use picture-level new seq begin detection for output functions
2014-12-19 09:55:26 +08:00
sijchen
0dc461541a Merge pull request #1651 from mstorsjo/improve-version-header
Improve version header
2014-12-19 09:32:48 +08:00
Martin Storsjö
8bfeae27a4 Add a public function for getting the codec version
If the codec library is loaded dynamically, it may be necessary that
the loaded library actually matches the version that was used when
it was built, to avoid issues due to ABI differences. Therefore add
a public function to allow getting the version of the currently
loaded library.
2014-12-18 13:20:33 +02:00
Martin Storsjö
4fb442a983 Captizalize OpenH264 correctly in the version header 2014-12-18 13:18:30 +02:00
ruil2
91574afca4 Merge pull request #1603 from sijchen/add_ver1
add generating script and the first version of codec_ver.h
2014-12-18 17:33:29 +08:00
huili2
b8ce2eb40e use picture-level new seq begin detection for output functions 2014-12-18 01:19:33 -08:00
Sijia Chen
e6134b5972 skip the git version hash in the header 2014-12-18 16:07:37 +08:00
sijchen
5b2469c0b5 Merge pull request #1642 from mstorsjo/avoid-rebuilds
Avoid rebuilds if the version header hasn't changed
2014-12-18 15:51:07 +08:00
sijchen
4db34bdf43 Merge pull request #1634 from ruil2/trace
use WELS_LOG_ERROR as default trace level in console app
2014-12-18 10:11:38 +08:00
sijchen
b208cac1c5 Merge pull request #1638 from ruil2/default_trace
modify WELS_LOG_WARNING as the default trace level
2014-12-18 10:11:19 +08:00
huili2
916d24d99e Merge pull request #1650 from huili2/bugfix_cabac_mbqpdelta
unify spsid for pic and add check for mb_qp_delta
2014-12-18 10:01:37 +08:00
HaiboZhu
7f27198c68 Merge pull request #1648 from huili2/bugfix_cabacinitidc
add check for cabac_init_idc range in parsing
2014-12-18 09:07:17 +08:00
huili2
208400eeb4 unify spsid for pic and add check for mb_qp_delta 2014-12-17 00:31:20 -08:00
ruil2
ab480fe387 Merge pull request #1649 from sijchen/fix_trace
[Encoder] fix a potential problem of trace
2014-12-17 16:05:32 +08:00
ruil2
58e868c074 Merge pull request #1643 from mstorsjo/check-num-refs
If lowering the maximum number of ref frames, check iNumRefFrames as well
2014-12-17 15:51:52 +08:00
sijchen
8dbdb418ca Merge pull request #1641 from mstorsjo/test-min-bitrate
Make sure the random test bitrate is high enough
2014-12-17 15:50:13 +08:00
Sijia Chen
1b26bd4b88 put this file into good format 2014-12-17 14:15:10 +08:00
Sijia Chen
3c08f04993 add fix for protection of wrong reading if input is invalid 2014-12-17 14:14:23 +08:00
huili2
030d320e43 Merge pull request #1646 from dongzha/cabacfix
cabac fix
2014-12-17 11:18:23 +08:00
huili2
182ae421a1 Merge pull request #1647 from HaiboZhu/Debug_Check_Ref_Picture_Complete
Change the name and call logic of CheckRefPicturesComplete function
2014-12-17 11:18:11 +08:00
huili2
9f0ed3fc4b add check for cabac_init_idc range in parsing 2014-12-16 18:13:21 -08:00
ruil2
ac992acaa9 Merge pull request #1640 from mstorsjo/fix-tests
Fix occasional failures in some tests
2014-12-17 09:29:36 +08:00
dong zhang
490a3e5562 cabac fix 2014-12-17 09:27:41 +08:00
Haibo Zhu
590eef6059 Change the name and call logic of CheckRefPicturesComplete function. 2014-12-16 17:26:13 -08:00
ruil2
affa753d5d Merge pull request #1645 from mstorsjo/type-signatures
Use the correct types instead of void pointers in function signatures
2014-12-17 09:21:11 +08:00
Martin Storsjö
f89780ddd8 Use the correct types instead of void pointers in function signatures
This gets rid of 50 lines of code with just casts of void pointers,
making the code shorter and clearer.
2014-12-16 22:13:38 +02:00
Ethan Hugg
6f876d79a6 Merge pull request #1644 from mstorsjo/fix-script-typos
Fix a number of typos in run_SafeDelete.sh
2014-12-16 09:26:23 -08:00
Martin Storsjö
ee5896e4a1 Fix a number of typos in run_SafeDelete.sh 2014-12-16 16:28:45 +02:00
Martin Storsjö
4746ce8fd4 If lowering the maximum number of ref frames, check iNumRefFrames as well
Make sure we don't set iMaxNumRefFrames lower than iNumRefFrames.

This fixes occasional test failures in
EncodeDecodeTestAPI.SetOptionEncParamExt.
2014-12-16 13:56:50 +02:00
Martin Storsjö
f90cd367d2 Avoid rebuilds if the version header hasn't changed
When generating the version header, don't overwrite it if the
new version is identical to the old one.
2014-12-16 12:23:50 +02:00
Martin Storsjö
47df411b1a Make sure the random test bitrate is high enough
The ForceIntraFrame test will fail (giving up after 100 skipped
frames) if the bitrate is not set high enough.

Set the minimum bitrate to w*h/50, which is a very low value,
but which still should allow getting a non-skipped frame within
a few attempts.
2014-12-16 11:56:48 +02:00
lyao2
9692f6cb20 Merge pull request #1639 from ruil2/qp_trace
fix error output info
2014-12-16 17:32:00 +08:00
Martin Storsjö
f4b3724976 Increase the minimum frame size in a test with multiple spatial layers
Make sure the input frame size is large enough that the downsampled
layers also have a nonzero resolution.
2014-12-16 11:13:22 +02:00
Martin Storsjö
59fefbe7c7 Use an inline function instead of a macro for clipping which contains rand()
When using a macro, the macro parameters get evaluated
multiple times, which means that the rand() value compared
actually isn't the same that is used as return value.

This makes sure that clipping works as intended for the
random tests.
2014-12-16 11:13:22 +02:00
Martin Storsjö
a9c2e1b431 Use the common WELS_CLIP3 macro instead of a custom reimplementation 2014-12-16 11:13:22 +02:00
dongzha
a4370b8ca8 Merge pull request #1637 from dongzha/SpeedUpSkipMode
astyle and speed up decoding by removing unnessary memset
2014-12-16 16:31:10 +08:00
ruil2
0612b07a6f fix error output info 2014-12-16 16:10:52 +08:00
lyao2
6a10553dce Merge pull request #1636 from ruil2/qp_trace
astyle two files
2014-12-16 16:04:50 +08:00
ruil2
f132745882 Merge pull request #1635 from mstorsjo/binary-comparison-ignore
Add a gitignore entry for another file created by the binary comparison scripts
2014-12-16 15:40:23 +08:00
dong zhang
89f78e9211 astyle and speed up decoding by removing unnessary memset 2014-12-16 15:30:09 +08:00
ruil2
fdb938a2c2 modify WELS_LOG_WARNING as the default trace level 2014-12-16 15:29:56 +08:00
ruil2
b932547fe8 astyle two files 2014-12-16 15:16:09 +08:00
Martin Storsjö
d387ebc358 Add a gitignore entry for another file created by the binary comparison scripts 2014-12-16 09:06:10 +02:00
ruil2
026ce4030a use WELS_LOG_ERROR as default trace level in console app 2014-12-16 13:14:53 +08:00
sijchen
2c69638773 Merge pull request #1633 from lyao2/avg_qp2
add average QP in statistics
2014-12-16 11:51:18 +08:00
ruil2
812b57c704 Merge pull request #1628 from mstorsjo/fix-tests
Fix binary comparison scripts and tables
2014-12-16 10:54:41 +08:00
lyao2
ca2436bb5e add average QP in statistics 2014-12-16 10:32:44 +08:00
ruil2
827c7b2aef Merge pull request #1629 from mstorsjo/msvc-casts
Cast a float to integer
2014-12-16 09:09:53 +08:00
ruil2
d87663b913 Merge pull request #1630 from zaheerm/fixcomments
Fix comments to be up to date with current API.
2014-12-16 09:09:44 +08:00
Martin Storsjö
c0633a147e Readd and update the accidentally cleared SHA1 test tables
These were accidentally cleared in 5ab5fe15, when the script
for updating them was broken.
2014-12-15 23:33:16 +02:00
Zaheer Abbas Merali
91736e85e8 Fix comments to be up to date with current API. 2014-12-15 11:37:32 -08:00
Martin Storsjö
54cc3daaa7 Cast a float to integer
This fixes warnings with MSVC.
2014-12-15 17:38:22 +02:00
Martin Storsjö
8a2237751a Fix a check in the binary comparison scripts 2014-12-15 17:28:10 +02:00
Martin Storsjö
3aac5e0fae Properly update hashes 2014-12-15 17:26:23 +02:00
huili2
8fb4048241 Merge pull request #1627 from HaiboZhu/Debug_potential_out_of_memory
Reset parameter set status and clear AU list when out of memory
2014-12-15 17:39:36 +08:00
Haibo Zhu
57043d16ad (1) Reset parameter set status and clear AU list when out of memory
(2) Free un-complete malloc memory, keep the original state, special when increase memory
2014-12-15 00:53:40 -08:00
huili2
d422ee59ad Merge pull request #1626 from dongzha/testcrash1
add protection
2014-12-15 15:39:46 +08:00
dongzha
ac061fe635 add protection 2014-12-15 14:47:55 +08:00
dongzha
091e5cba0a Merge pull request #1624 from huili2/au_data_check
change au_ready status and check au number
2014-12-15 13:46:27 +08:00
dongzha
eeee1a2e95 Merge pull request #1622 from dongzha/setunuse
add set unused in dpb
2014-12-15 13:35:36 +08:00
huili2
c20e1c6795 change au_ready status and check au number 2014-12-14 20:46:14 -08:00
sijchen
509727e225 Merge pull request #1623 from ruil2/level_5
keep the consistency between sps level and parameter level
2014-12-15 11:55:30 +08:00
ruil2
5ab5fe155b keep the consistency between sps level and parameter level 2014-12-15 09:56:54 +08:00
sijchen
7dcaaf5328 Merge pull request #1618 from huili2/modify_freeze_pos
modify freeze output to proper location
2014-12-12 17:50:02 +08:00
dong zhang
ad38cfe46c add set unused in dpb 2014-12-12 16:53:13 +08:00
sijchen
cc1f3ade3a Merge pull request #1617 from ruil2/bits_update
fix a typo
2014-12-12 16:25:48 +08:00
huili2
984497cc09 modify freeze output to proper location 2014-12-11 23:42:04 -08:00
ruil2
06c251fa48 fix a typo 2014-12-12 14:29:45 +08:00
sijchen
93265d7a44 Merge pull request #1616 from dongzha/testcrash
fix two continus IDR, with same sps/pps id, but different resolution
2014-12-12 10:43:32 +08:00
dongzha
1bdf00ddf4 fix two continus IDR, with same sps/pps id, but different resolution 2014-12-12 09:38:44 +08:00
ruil2
41339f3023 Merge pull request #1615 from lyao2/ut_idr3
refine the UT case for checking IDR request
2014-12-12 09:13:29 +08:00
sijchen
0ff1eb482f Merge pull request #1612 from huili2/log_add_this_codec
add this log for codec
2014-12-11 17:01:38 +08:00
ruil2
ec99819ce8 Merge pull request #1614 from sijchen/fix_idr_id1
[Encoder] fix idr_id: idr_id should be adding regardless of the sps strategy
2014-12-11 16:41:59 +08:00
ruil2
3be8ae7a4e Merge pull request #1613 from sijchen/fix_ut2
[UT] encoder log level adjustment
2014-12-11 16:29:34 +08:00
lyao2
2e85e3c7d9 refine the UT case for checking IDR request 2014-12-11 14:32:26 +08:00
Sijia Chen
f1a7a1a966 encoder log level adjustment in UT to avoid too many output and some formatting 2014-12-11 14:31:32 +08:00
huili2
3e57fdc448 add this log for codec 2014-12-10 22:15:32 -08:00
sijchen
5ff55a6ec2 Merge pull request #1608 from ruil2/bits_update
update maxbitrate to control bitrate vary range
2014-12-11 13:46:07 +08:00
dongzha
44e4531897 Merge pull request #1609 from dongzha/NewFixEcRatioCalc
New fix ec ratio calc
2014-12-11 13:08:01 +08:00
dongzha
44bd61683a Merge pull request #1606 from huili2/log_for_memory_realloc
add log for ref pic buffer memory alloc
2014-12-11 13:07:43 +08:00
dong zhang
d20a3bdb28 fix typo bug 2014-12-11 12:28:32 +08:00
Sijia Chen
32d6193f97 fix idr_id: idr_id should be adding regardless of the sps strategy 2014-12-11 10:58:27 +08:00
ruil2
5ba9e409ba update maxbitrate to control bitrate vary range 2014-12-11 10:56:58 +08:00
dong zhang
2c468b96a9 add flag to count EC Mbs due to ref error
add UT
2014-12-11 10:49:55 +08:00
dong zhang
ecc8ae6ebb fix decodestatus uiEcRatio calc bug 2014-12-11 10:39:44 +08:00
sijchen
065c3a7769 Merge pull request #1607 from mstorsjo/encoder-init-log
Log the encoder version later in the initialization
2014-12-11 10:28:24 +08:00
Martin Storsjö
7da17b5abd Log the encoder version later in the initialization
Previously, the encoder logging was done in InitEncoder(),
which is called from the constructor. Therefore, it was impossible
to override the log level, to silence this message.
2014-12-10 14:39:08 +02:00
dongzha
af97f2d4bb Merge pull request #1605 from sijchen/fix_ut1
fix a UT function
2014-12-10 11:18:08 +08:00
sijchen
4e88de1755 Merge pull request #1600 from shihuade/UpdateSHA1
update SHA1 table which have been broken by previous update
2014-12-10 11:09:11 +08:00
Sijia Chen
87c83c0d36 fix a UT function 2014-12-10 10:49:58 +08:00
dongzha
44017193ed Merge pull request #1601 from dongzha/FixDecodeStatusFps
add a decoder status: float fActualAverageFrameSpeedInMs
2014-12-10 10:40:08 +08:00
Sijia Chen
b65410ebdb add generating script and the first version of codec_ver.h 2014-12-10 10:10:23 +08:00
dong zhang
354eee3e2b add a decoder status: float fActualAverageFrameSpeedInMs; ///< actual average_Decoding_Time, includeing freezed picture 2014-12-10 10:00:34 +08:00
huili2
155a91406c Merge pull request #1599 from HaiboZhu/Debug_Add_subSPS_check
Add subSPS pre-active check in CheckActiveSPS
2014-12-09 17:11:06 +08:00
Haibo Zhu
e47a3638af Add subSPS pre-active check in CheckActiveSPS 2014-12-09 00:06:19 -08:00
huade
944a041066 1 update SHA1 table which have been broken by previous update; 2 enhance script to support more case(multi layer etc.) 2014-12-09 15:59:07 +08:00
huili2
14eeaf2278 add log for ref pic buffer memory alloc 2014-12-08 22:35:07 -08:00
sijchen
e041bc6938 Merge pull request #1597 from mstorsjo/msvc-casts
Add casts when converting from int64_t or double to int32_t
2014-12-09 10:03:03 +08:00
Martin Storsjö
901a599b36 Add casts when converting from int64_t or double to int32_t
This fixes warnings when building with MSVC.
2014-12-08 11:48:31 +02:00
sijchen
cc5978b252 Merge pull request #1594 from lyao2/RC_maxBr_commit5
Rate control refine to fit MAX bitrate requirement
2014-12-08 11:03:43 +08:00
sijchen
c2d585761a Merge pull request #1595 from ruil2/update_2
should not set WELS_LOG_ERROR level in encoder initilization.
2014-12-08 11:01:19 +08:00
ruil2
317ac1ca85 change info level as default level 2014-12-05 17:36:03 +08:00
ruil2
56c895ffb4 1. should not set WELS_LOG_ERROR level in encoder initilization.
2.fix UT bug
2014-12-05 17:08:00 +08:00
lyao2
c01606c28a Rate control refine to fit MAX bitrate requirement 2014-12-05 12:09:08 +08:00
ruil2
ea93f3943e Merge pull request #1593 from ethanhugg/gmpapiversion
Switch to use stable branch of gmp-api
2014-12-05 09:40:05 +08:00
Ethan Hugg
a8159c89d1 Switch to use stable branch of gmp-api 2014-12-04 10:24:36 -08:00
HaiboZhu
befd5bdd56 Merge pull request #1592 from dongzha/FixGreyPic
fix grey picture when resolution is the same
2014-12-04 18:11:07 +08:00
dongzha
fc895c13ce fix grey picture when resolution is the same 2014-12-04 17:22:27 +08:00
HaiboZhu
054b8eeb3a Merge pull request #1588 from huili2/dec_stat_accumulate
accumulate dec stat
2014-12-04 15:37:10 +08:00
HaiboZhu
60b6ce1454 Merge pull request #1589 from huili2/fix_fmo_sliceskip
fix crash issue of sliceskip and inf-loop in fmo
2014-12-04 15:36:51 +08:00
huili2
928a7eac2a fix crash issue of sliceskip and inf-loop in fmo 2014-12-03 20:26:00 -08:00
sijchen
a5cabf0be4 Merge pull request #1582 from mstorsjo/lib-install-fixes
Fix/clean up building and installing shared libraries
2014-12-02 11:48:22 -08:00
ruil2
91ae2dab7a Merge pull request #1587 from mstorsjo/msvc-warnings
Don't implicitly convert int to bool
2014-12-02 15:54:35 +08:00
ruil2
dd24edc8ff Merge pull request #1585 from dongzha/issue1535New
fix issue #1535 new
2014-12-02 15:54:26 +08:00
Martin Storsjö
5d4eb63d52 Don't implicitly convert int to bool
This avoids warnings with MSVC.
2014-12-02 09:35:05 +02:00
ruil2
f4af5d2fda Merge pull request #1586 from ganyangbbl/fix_character
fix chinese character
2014-12-02 15:10:55 +08:00
ganyangbbl
6981aec743 fix chinese character 2014-12-02 14:30:31 +08:00
huili2
8b9be2b3dc accumulate dec stat 2014-12-01 19:01:06 -08:00
dong zhang
f668e1be98 fix issue 1535 2014-12-02 09:35:39 +08:00
sijchen
607d814e0f Merge pull request #1577 from ruil2/set_param
modify log info(remove unuseful log and add some new logs)
2014-12-01 11:36:24 -08:00
Martin Storsjö
3d263d1087 Set a default SHAREDLIB_DIR in the main Makefile
Only override it in the ones where the default isn't desired.
2014-12-01 15:44:27 +02:00
Martin Storsjö
9b59e50292 Simplify creating output directories for the install-shared rule 2014-12-01 15:44:27 +02:00
Martin Storsjö
a48b632aed Actually install the shared library into $(SHAREDLIB_DIR) as intended 2014-12-01 15:44:27 +02:00
Martin Storsjö
e132658346 Set SHAREDLIB_DIR for msvc as well 2014-12-01 15:44:27 +02:00
Martin Storsjö
59c30f8952 Handle generating the versionless library via make rules
This makes sure both "make libopenh264.so" and "make libopenh264.so.0"
work as intended.

Use the versionless name as dependency for the install rule,
to make sure both (if possible) are created.
2014-12-01 15:43:35 +02:00
Martin Storsjö
575b6fb570 Check the suffix instead of checking whether a file is a link
This feels more straightforward - some file systems/environments
(such as MSys) implement symlinks as plain file copies, where
distinguishing whether a file is a link might be hard.
2014-12-01 15:40:25 +02:00
Martin Storsjö
2c9b5b98c0 Actually install the versioned shared library file as well 2014-12-01 15:40:25 +02:00
Martin Storsjö
8e419e41d3 Simplify setting the shlib flags for msvc 2014-12-01 15:40:25 +02:00
Martin Storsjö
80beaed5c6 Fix the dependencies of the install-shared target
Previously calling "make install" failed unless the target
actually already was built, for platforms where the shared
libraries are versioned.
2014-12-01 15:40:25 +02:00
Martin Storsjö
8f7e10ab12 Honor the silent build flag when adding the shared library symlink 2014-12-01 15:40:25 +02:00
Martin Storsjö
a7d8142a44 Set the right SHAREDLIBSUFFIXVER for msvc 2014-12-01 15:40:25 +02:00
Martin Storsjö
397e20b0f3 Install the import library via the EXTRA_LIB mechanism on mingw as well
Prior to 3f69873c99, there already was a mechanism for installing
the import library, used for the MSVC builds. Use that for mingw
as well, instead of adding more hardcoded rules.
2014-12-01 15:40:25 +02:00
zhilwang
852ed8a2d0 Merge pull request #1578 from ruil2/rc
use existed assembly function in cabac encoder
2014-12-01 17:12:52 +08:00
ruil2
2e15351d6d Merge pull request #1567 from dongzha/FixMvCpBug
avoid using the same picture buff for prev pic and curr pic
2014-12-01 14:53:17 +08:00
ruil2
b1dccaa627 use existed assembly function in cabac encoder 2014-12-01 14:45:04 +08:00
sijchen
8c7aaa8421 Merge pull request #1568 from ruil2/cleanup
add iBitsVaryPercentage parameters to control bitrate
2014-11-30 21:39:39 -08:00
ruil2
9a08b7f97c Merge pull request #1574 from huili2/dec_stat_add_freeze
add dec status for freezing
2014-12-01 12:43:22 +08:00
ruil2
a100fb8031 modify log info(remove unuseful log and add some new logs) 2014-12-01 12:13:58 +08:00
sijchen
8e39cb3a3a Merge pull request #1575 from ruil2/set_param
add SetOption(ENCODER_OPTION_SVC_ENCODE_PARAM_BASE,&base) for encoder
2014-11-30 19:39:18 -08:00
dongzha
d58f90947c avoid using the same picture buff for prev pic and curr pic 2014-12-01 10:52:37 +08:00
ruil2
8028fe7130 add SetOption(ENCODER_OPTION_SVC_ENCODE_PARAM_BASE,&base) for encoder 2014-12-01 10:35:32 +08:00
ruil2
c592d18dfd Merge pull request #1573 from sijchen/after_review1
[Encoder] remove a too-tight checking of bit rate
2014-12-01 10:31:47 +08:00
ruil2
30820fd8b5 use iBitsVaryPercentage passed by the app instead of the macro 2014-12-01 09:16:35 +08:00
Sijia Chen
7cea82bdf8 remove a too-tight checking of bit rate 2014-11-28 16:15:49 -08:00
sijchen
e7debe7351 Merge pull request #1571 from mstorsjo/silence-intentional-errors
Silence logging in a test which intentionally can trigger errors
2014-11-28 10:28:05 -08:00
sijchen
59e782a8a5 Merge pull request #1572 from mstorsjo/loopfilter-opts
Fixes relating to the loopfilter parameter
2014-11-28 10:27:14 -08:00
Ethan Hugg
1526de3ae5 Merge pull request #1566 from nirbheek/master
Makefile: Fix shared library building on various OSes
2014-11-28 08:49:25 -08:00
Martin Storsjö
0bae0f869a Validate that iLoopFilterDisableIdc is set to a sensible value in ParamValidationExt
In WelsEncoderParamAdjust it is already clipped in the
same way, but here we should probably rather error out
than to silently clip it to the right range.
2014-11-28 13:08:52 +02:00
Martin Storsjö
24cd934ba9 Log what uiDisableDeblockingFilterIdc was set to when printing an error message 2014-11-28 13:06:12 +02:00
Martin Storsjö
90eee67eb7 Don't set invalid iLoopFilterDisableIdc in RandomParamExtCombination 2014-11-28 13:05:32 +02:00
Martin Storsjö
b9dc310857 Silence logging in a test which intentionally can trigger errors 2014-11-28 11:04:03 +02:00
huili2
504cabf106 add dec status for freezing 2014-11-28 00:05:36 -08:00
ruil2
c44d4a7f07 Merge pull request #1569 from mstorsjo/pointer-diff-cast
Add casts when converting pointer differences to integers
2014-11-27 21:54:42 +08:00
Martin Storsjö
917d41bd47 Add casts when converting pointer differences to integers
This fixes warnings when building with MSVC in 64 bit mode.
2014-11-27 11:31:13 +02:00
ruil2
7c0369da23 add iBitsVaryPercentage parameters to control bitrate 2014-11-27 15:55:48 +08:00
HaiboZhu
82b70b34fe Merge pull request #1561 from ruil2/cleanup
remove some macro definitions in header files
2014-11-27 14:22:06 +08:00
zhilwang
3a73179cab Merge pull request #1559 from HaiboZhu/EC_off_crash_no_output
Debug for (1) decoder crash when delay decoding (2) no output when EC off
2014-11-27 14:21:48 +08:00
HaiboZhu
69f6db1b90 Merge pull request #1560 from ruil2/max2
cleanup macro definition
2014-11-27 14:21:37 +08:00
HaiboZhu
c2c861f199 Merge pull request #1562 from zhilwang/asm-cabac
Add asm code for decoder cabac
2014-11-27 14:21:02 +08:00
Nirbheek Chauhan
3f69873c99 Makefile: Fix shared library building on various OSes
Versioned for OS not in (Windows, Android), and create a .dll.a implib on Windows
2014-11-27 02:04:06 +05:30
zhiliang wang
92bc88eacb Add asm code for decoder cabac 2014-11-26 16:44:12 +08:00
ruil2
80ce939d7a remove some macro definitions in header files 2014-11-26 16:15:19 +08:00
ruil2
a43fa3aec2 cleanup macro definition 2014-11-26 15:22:04 +08:00
sijchen
e1262a9ac9 Merge pull request #1558 from huili2/comment_outputlog
comment output info with FREEZE
2014-11-25 22:54:43 -08:00
sijchen
fe7faf768a Merge pull request #1555 from huili2/comment_API_parseonly
add parse only comment in API
2014-11-25 22:54:04 -08:00
Haibo Zhu
aa5e7f7927 Remove the SPS/PPS exist ahead reset logic and change the CheckSpsActive logic 2014-11-25 21:53:40 -08:00
huili2
9da19758cf Merge pull request #1556 from ruil2/max2
remove some unused code
2014-11-26 13:33:21 +08:00
huili2
f131b4540b Merge pull request #1557 from dongzha/AddDecoderTimeStampNew
add timestamp in decoder
2014-11-26 13:32:40 +08:00
dong zhang
2e5243e5fc add timestamp in decoder 2014-11-26 13:03:46 +08:00
ruil2
4a6de5bb13 remove some unused code 2014-11-26 10:26:16 +08:00
huili2
347e4893a9 add parse only comment in API 2014-11-25 18:22:23 -08:00
huili2
94dde141fa comment output info with FREEZE 2014-11-25 18:09:01 -08:00
sijchen
f48b2e55ba Merge pull request #1553 from ruil2/max2
add maxbitrate verification
2014-11-25 09:14:39 -08:00
sijchen
7be8d200d5 Merge pull request #1554 from mstorsjo/add-float-cast
Explicitly cast int64_t to float
2014-11-25 09:12:37 -08:00
Martin Storsjö
1ff9de36ce Explicitly cast int64_t to float
This fixes warnings when bulding with MSVC.
2014-11-25 14:28:20 +02:00
ruil2
22cc0a88c6 Merge pull request #1552 from mstorsjo/init-parameters
Initialize the bParseOnly field in DecoderInterfaceTest::TestInitUninit
2014-11-25 17:14:32 +08:00
ruil2
0d426b826d Merge pull request #1551 from sijchen/after_review2
add parentness
2014-11-25 17:13:54 +08:00
ruil2
d543ae89db add maxbitrate verification 2014-11-25 17:12:06 +08:00
Martin Storsjö
29da6a600a Initialize the bParseOnly field in DecoderInterfaceTest::TestInitUninit
This fixes valgrind warnings about using uninitialized data
in this test.
2014-11-25 09:59:25 +02:00
Sijia Chen
cef85118b5 add parentness 2014-11-24 22:44:06 -08:00
huili2
305a2421be Merge pull request #1549 from dongzha/ECMvCopy
add EC MV copy
2014-11-25 12:59:48 +08:00
ruil2
f1fb0d6b69 Merge pull request #1548 from sijchen/after_review
[Encoder] add one more condition for statistics printing to avoid potential timestamp problem
2014-11-25 11:20:38 +08:00
dong zhang
9425c2ab10 add EC MV copy 2014-11-25 10:45:58 +08:00
Sijia Chen
3be7e90221 add one more conditin for statistics printing to avoid timestamp problem 2014-11-24 16:11:52 -08:00
sijchen
48e79d51b5 Merge pull request #1547 from huili2/ParseDecode
parse only add and UT: passed reviewed at https://rbcommons.com/s/OpenH264/r/910/
2014-11-24 11:28:17 -08:00
sijchen
336b2d1537 Merge pull request #1542 from sijchen/review
[Encoder] refactor Sps generation: passed review at https://rbcommons.com/s/OpenH264/r/930/
2014-11-24 11:27:38 -08:00
huili2
b231e3f000 parse only add and UT 2014-11-24 00:04:36 -08:00
sijchen
53c14dccf0 Merge pull request #1545 from ruil2/add_traces
add some traces
2014-11-21 14:01:43 -08:00
ruil2
3025c58a67 add some traces 2014-11-21 13:27:10 +08:00
ruil2
a0b0866597 Merge pull request #1543 from dongzha/Fix1535
Check and Fix some issue #1535
2014-11-21 11:30:36 +08:00
ruil2
1359583c55 Merge pull request #1544 from shihuade/master
1.doxgen documentation format for comments in api/*.h 2. comments to wik...
2014-11-21 11:29:34 +08:00
huashi
7175d3c90e 1.doxgen documentation format for comments in api/*.h 2. comments to wiki tools in openh264/docs/* 2014-11-21 10:38:30 +08:00
Sijia Chen
cdd410ca66 refactor Sps generation 2014-11-20 12:55:48 -08:00
ruil2
24fb213d6e Merge pull request #1537 from sijchen/after_review
[Encoder] Two refinements related to max bit rate setting and Timestamp
2014-11-20 09:33:36 +08:00
Sijia Chen
0b2c82d92b add UNSPECIFIED value for max bit rate setting 2014-11-19 16:05:19 -08:00
Sijia Chen
810b9770fc using same type as in interface rather than int32 for uiTimestamp to avoid missing of preciseness 2014-11-19 15:45:09 -08:00
dong zhang
b18e905946 Check and Fix some issue#1535 2014-11-19 16:03:34 +08:00
ruil2
c13bfe6407 Merge pull request #1536 from sijchen/improve_br_valid
[Encoder] adjust the param validation of max bit rate
2014-11-18 18:42:03 +08:00
sijchen
0252f3f346 Merge pull request #1526 from ruil2/max_nal_size
add return value processing
2014-11-17 16:43:45 -08:00
sijchen
b05a52be7a Merge pull request #1534 from syureyi/level9
add level 9 supporting
2014-11-17 16:43:37 -08:00
Sijia Chen
7e24efc620 adjust the param validation of max bit rate 2014-11-17 16:39:42 -08:00
zhuiling
02853a9a96 add level 9 supporting 2014-11-17 16:29:33 +08:00
dongzha
cbb6e993cf Merge pull request #1533 from mstorsjo/speedup-tests
Speed up some slow tests in the unit test suite
2014-11-14 17:16:06 +08:00
dongzha
bfee07dde4 Merge pull request #1532 from huili2/new_EC_IDR_reschange
add EC method to freeze sequence when resolution changed and decoding IDR error
2014-11-14 17:14:09 +08:00
Martin Storsjö
deefdcee10 Use & 0xff instead of WELS_CLIP3(, 0, 255)
This speeds up the whole EncoderInterfaceTest to about double
the speed from before.
2014-11-14 10:41:21 +02:00
Martin Storsjö
45c322a8ae Reduce the number of rounds in DecoderCrashTest
Currently this one single test accounts for 12-20% of the total
runtime of running the unit test suite.
2014-11-14 10:41:21 +02:00
ruil2
606da1a97d Merge pull request #1531 from mstorsjo/use-right-type
Use the right data type for a variable
2014-11-14 16:30:17 +08:00
Martin Storsjö
9ec743c156 Use the right data type for a variable
Both pNalLengthInByte[] that are accumulated, and sFbi.iFrameSizeInBytes
that it is compared to, are plain 'int', not 'uint32_t'.

This fixes warnings about comparison between signed and unsigned.
2014-11-14 09:47:49 +02:00
huili2
0d16fd61b2 add EC method to freeze sequence when resolution changed and decoding IDR error 2014-11-13 19:26:10 -08:00
ruil2
703bbef128 Merge pull request #1530 from sijchen/after_review
[Encoder] add total length in encoder output and complete statistics
2014-11-14 11:20:45 +08:00
Sijia Chen
b56b8725fc add total length in encoder output and complete most of the statistis calculation 2014-11-13 13:56:58 -08:00
ruil2
aed7b2316c Merge pull request #1528 from mstorsjo/fix-warnings
Cast to the right data type to avoid comparison warnings in gcc
2014-11-13 17:17:41 +08:00
Martin Storsjö
2453676960 Cast to the right data type to avoid comparison warnings in gcc 2014-11-13 10:48:45 +02:00
HaiboZhu
7a2e536e44 Merge pull request #1525 from dongzha/FixbuginMVClip
fix mv clip at right boarder
2014-11-13 14:01:45 +08:00
ruil2
66165a65d5 add return value processing 2014-11-13 13:26:14 +08:00
sijchen
b3922b1d3a Merge pull request #1519 from ruil2/max_nal_size
add maxnalsize control for gmp wrapper
2014-11-12 20:44:24 -08:00
dong zhang
e4f114e006 fix mv clip at right boarder 2014-11-13 10:48:35 +08:00
dongzha
429ccb38a8 Merge pull request #1524 from huili2/parse_err_return_bug_fix
fix bug of parse error return for VCL data
2014-11-12 13:18:08 +08:00
ruil2
9ba0a1d977 Merge pull request #1522 from sijchen/after_review
[Encoder] fix a calculation of fAverageFrameRate
2014-11-12 12:29:13 +08:00
huili2
2527cf5d0b fix bug of parse error return for VCL data 2014-11-11 19:23:58 -08:00
Sijia Chen
cd5928d397 fix a calculation of fAverageFrameRate 2014-11-11 16:12:38 -08:00
sijchen
f42c9fae42 Merge pull request #1518 from huili2/ec_UT_0_bugfix
EC UT fail bug fix
2014-11-11 14:52:28 -08:00
sijchen
a37f1abe5e Merge pull request #1517 from ruil2/cabac_qp
fix cabac encoding bug -- don't get the correct previous mb qp
2014-11-11 14:52:04 -08:00
ruil2
128546b992 add maxnalsize control for gmp wrapper 2014-11-11 14:18:02 +08:00
ruil2
560fcf17fd rename parameters 2014-11-11 12:21:01 +08:00
huili2
fd45e7ff15 EC UT fail bug fix 2014-11-10 17:56:26 -08:00
sijchen
9512515a41 Merge pull request #1515 from ruil2/add_nal_trace
add some traces for bitstream output
2014-11-10 15:00:08 -08:00
ruil2
24823621e1 Merge pull request #1516 from mstorsjo/remove-duplicated-field
Remove a duplicated field in SWelsSvcCodingParam
2014-11-10 15:56:51 +08:00
ruil2
c31511257b fix cabac encoding bug -- don't get the correct previous mb qp 2014-11-10 15:34:49 +08:00
ruil2
1c44c43b8a add some traces for bitstream output 2014-11-10 15:20:25 +08:00
Martin Storsjö
0aa77d2985 Remove a duplicated field in SWelsSvcCodingParam
The same field already exists in SEncParamExt. When the
initialization was deduplicated in ac404ce, this lead to
reading the now uninitialized field in SWelsSvcCodingParam,
instead of the properly initialized one in the base class.
2014-11-10 09:03:18 +02:00
sijchen
8b49f98475 Merge pull request #1507 from ruil2/init
remove repeat initialization
2014-11-09 18:07:21 -08:00
ruil2
fc811a80fb Merge pull request #1512 from mstorsjo/add-float-cast
Add a cast when converting from double to float
2014-11-09 09:36:21 +08:00
ruil2
843955bc06 Merge pull request #1511 from mstorsjo/check-fread-return-value
Check the return value of fread
2014-11-09 09:35:26 +08:00
Ethan Hugg
a7b22795bf Merge pull request #1510 from mstorsjo/unsigned-int-literals
Change integer literals to unsigned to avoid warnings about comparison between signed and unsigned
2014-11-07 09:49:00 -08:00
Ethan Hugg
3c753c42b8 Merge pull request #1509 from mstorsjo/fix-warnings-cast
Add casts to avoid warnings about comparison between signed and unsigned
2014-11-07 09:46:33 -08:00
Ethan Hugg
067fa09781 Merge pull request #1508 from mstorsjo/remove-unused-variables
Remove unused variables
2014-11-07 09:45:52 -08:00
Martin Storsjö
c8afd15681 Add a cast when converting from double to float
This fixes warnings with MSVC.
2014-11-07 11:41:59 +02:00
Martin Storsjö
80bfc43df5 Check the return value of fread
This silences warnings on linux/gcc.
2014-11-07 11:24:30 +02:00
Martin Storsjö
50e2eb5e3c Change integer literals to unsigned to avoid warnings about comparison between signed and unsigned
This fixes warnings in gcc.
2014-11-07 11:19:19 +02:00
Martin Storsjö
2b9f4f6607 Add casts to avoid warnings about comparison between signed and unsigned
This fixes warnings with gcc.
2014-11-07 11:17:44 +02:00
Martin Storsjö
08c07e4b8f Remove unused variables
This fixes warnings with clang and gcc.
2014-11-07 11:12:51 +02:00
ruil2
ac404ce69d remove repeat initialization 2014-11-07 14:58:43 +08:00
HaiboZhu
44013d4cd5 Merge pull request #1504 from syureyi/android_bugfix
android platform bug fix
2014-11-06 21:31:03 +08:00
dongzha
789603a8b1 Merge pull request #1503 from huili2/ec_crossIDR
enable cross IDR EC method
2014-11-06 17:24:17 +08:00
zhuiling
7fa6c576e3 android platform bug fix 2014-11-06 17:15:42 +08:00
dongzha
0fa667ac5f Merge pull request #1502 from dongzha/RemoveUglyCode
remove ugly MC code
2014-11-06 15:26:38 +08:00
dongzha
1a7826c6eb remove ugly MC code 2014-11-06 14:44:33 +08:00
sijchen
5cb5c28331 Merge pull request #1500 from syureyi/decoderstatics
decoder statictis adding
2014-11-06 14:25:04 +08:00
zhuling13
45ef803e4d decoder statictis adding
mem

mem

decstatictis

time change

time change

set decTime=0
2014-11-05 22:01:32 -08:00
huili2
3d21825901 Merge pull request #1497 from dongzha/FixCabacBug
fix cabac bug in deltaqp
2014-11-06 12:19:13 +08:00
dongzha
ba0351f569 fix cabac bug in deltaqp 2014-11-06 10:51:18 +08:00
sijchen
63180b9b36 Merge pull request #1494 from huili2/ec_final_crash_UT
add a simple UT for debugging decoder crash
2014-11-05 14:24:54 +08:00
ruil2
8ed4e83e93 Merge pull request #1490 from sijchen/after_review
[Encoder] Fixing for large number of slices
2014-11-04 15:12:38 +08:00
huili2
32697b046b add a simple UT for debugging decoder crash 2014-11-03 23:05:34 -08:00
sijchen
b896faa47c Merge pull request #1493 from ruil2/printf
use %lld instead of %8d for longlong type
2014-11-04 14:30:36 +08:00
huili2
103fa5bbed enable cross IDR EC method 2014-11-03 22:11:49 -08:00
ruil2
fe55d5a208 update timestamp unit as millisecond 2014-11-04 11:28:35 +08:00
ruil2
18ed25fbb3 use %lld instead of %8d for longlong type 2014-11-04 10:37:23 +08:00
sijchen
783daf3d8a Merge pull request #1485 from ruil2/cabac_refine
pass each frame timestamp to codec
2014-11-04 09:31:07 +08:00
Sijia Chen
54c677cdd7 fixing OverallMbMap for slice_idx>255 and some log improvements 2014-11-04 09:19:36 +08:00
sijchen
08baf65251 Merge pull request #1488 from mstorsjo/fix-warnings
Fix warnings with gcc and MSVC
2014-11-04 09:13:55 +08:00
sijchen
ca1c357058 Merge pull request #1486 from mstorsjo/fix-pow-params
Don't try to use pow(int,int)
2014-11-04 09:13:46 +08:00
Martin Storsjö
8ffacf0918 Add casts to avoid warnings about comparison between signed and unsigned
This fixes warnings with gcc and msvc.
2014-11-03 11:28:40 +02:00
Martin Storsjö
0e9541247a Use the right data type for some local variables
pDecEngine->uiOffset is an uint64_t as well, and *pSliceNum
is uint32_t.

This fixes warnings about comparison between signed and unsigned
in gcc and msvc.
2014-11-03 11:28:35 +02:00
Martin Storsjö
c1b48640fb Don't try to use pow(int,int)
When building for android or older MSVC versions, this makes the build
fail, when it is ambiguous which pow() overload to use, when there
is no function matching pow(int, int).
2014-11-03 11:23:10 +02:00
ruil2
c5029ef275 Merge pull request #1484 from mstorsjo/fix-chmod
Remove the executable bit from new test sequences
2014-11-03 17:10:44 +08:00
ruil2
e061bb3fc9 pass each frame timestamp to codec 2014-11-03 17:05:38 +08:00
Martin Storsjö
2951a7f3a3 Remove variables that are set but not used
This fixes build warnings with gcc.
2014-11-03 10:52:02 +02:00
Martin Storsjö
7478714ac9 Remove the executable bit from new test sequences 2014-11-03 10:10:17 +02:00
sijchen
9ac2d2ad85 Merge pull request #1483 from dongzha/EnhanceDecConsole
modify console code for Demo interfaces test (this is reviewed at: https://rbcommons.com/s/OpenH264/r/890/)
2014-11-03 15:41:42 +08:00
sijchen
dbd4330508 Merge pull request #1482 from ruil2/cabac_refine
add setoption trace
2014-11-03 15:39:45 +08:00
sijchen
938f441751 Merge pull request #1480 from dongzha/cleanCabacDecoder
add decoder cabac support and add  UT
2014-11-03 15:38:24 +08:00
dong zhang
880e0fff06 modify macro STICK_STREAM_SIZE // For Demo interfaces test with track file of integrated frames
add macro NO_DELAY_DECODING	// For Demo interfaces test with no delay decoding
2014-11-03 11:26:14 +08:00
ruil2
c19db25043 add setoption trace 2014-11-03 10:37:07 +08:00
dong zhang
cf85745752 add decoder cabac support and add UT 2014-11-03 10:03:43 +08:00
sijchen
c7b5051738 Merge pull request #1469 from shihuade/APIUTV1.5.2
refactor --for BaseEncoderTest
2014-11-03 09:31:11 +08:00
ruil2
07bf80ba39 Merge pull request #1476 from mstorsjo/sps-constraints
Set constraint set 0 and 1 flags for non-scalable as well
2014-11-03 09:29:26 +08:00
Martin Storsjö
53e2f67e80 Set constraint set 0 and 1 flags for non-scalable as well
This allows decoders to know that a baseline stream doesn't
contain any of the features that aren't in the constrained
baseline subset.

Set the flags based on what profile we target.
2014-10-31 10:48:09 +02:00
ruil2
3abd54ca73 Merge pull request #1477 from mstorsjo/avoid-msvc-warnings
Avoid warnings when building with MSVC
2014-10-31 15:36:14 +08:00
ruil2
8e49898243 Merge pull request #1478 from sijchen/after_review61
[Encoder] add validation of slice parameters instead of assert
2014-10-31 15:34:37 +08:00
sijchen
66b1610114 Merge pull request #1472 from mstorsjo/fix-test-random
Make sure the width/height is large enough in SetOptionEncParamExt
2014-10-31 13:50:10 +08:00
Sijia Chen
24192cc235 add validation of slice parameters instead of assert 2014-10-30 18:31:50 +08:00
Martin Storsjö
655f3b43b6 Add a cast when converting from int64_t to float
This avoids a warning when building with MSVC.
2014-10-30 11:07:22 +02:00
Martin Storsjö
a291470072 Avoid warnings about converting from int to bool
MSVC used to warn about this.
2014-10-30 11:06:46 +02:00
Martin Storsjö
ec0d151879 Make sure the width/height is large enough in SetOptionEncParamExt
When using 4 downsampled layers, make sure the random width/height
is large enough that the downsampled layers don't have a zero size.

Since the value never will be too small now, there's no need to
use WELS_CLIP3 any longer.
2014-10-30 08:54:18 +02:00
dongzha
3b5448cbbc Merge pull request #1475 from ruil2/cabac_refine
Cabac refine
2014-10-30 13:39:46 +08:00
ruil2
055915d720 update windows project for table change 2014-10-30 12:47:26 +08:00
ruil2
100de97b49 move cabac table to common 2014-10-30 12:42:09 +08:00
sijchen
3a1f0a3d95 Merge pull request #1471 from mstorsjo/fix-warnings
Remove unused variables and an impossible condition
2014-10-30 09:10:08 +08:00
sijchen
41ed734674 Merge pull request #1473 from mstorsjo/silence-test-warnings
Silence warning logging while running tests that can produce errors
2014-10-30 09:08:55 +08:00
sijchen
b8e0a3fa38 Merge pull request #1474 from mstorsjo/use-proper-logging
Use WelsLog instead of fprintf for normal runtime errors
2014-10-30 08:21:28 +08:00
Martin Storsjö
7ce4da8a41 Use WelsLog instead of fprintf for normal runtime errors 2014-10-29 22:45:44 +02:00
Martin Storsjö
1c2940479d Silence warning logging while running tests that can produce errors 2014-10-29 22:44:40 +02:00
Martin Storsjö
2907cb2875 Remove an impossible condition
uiIntraPeriod is unsigned, and thus can't ever be negative.

The subtraction on the line above can't ever make the value wrap
around either, since param_.uiIntraPeriod % uiGOPSize always is
smaller than or equal to param_.uiIntraPeriod. Thus, the check
never is necessary even if the value would be signed either.

This fixes warnings when building with clang.
2014-10-29 22:07:21 +02:00
Martin Storsjö
a625dc836d Remove unused variables 2014-10-29 22:07:20 +02:00
Ethan Hugg
9be23c7821 Merge pull request #1470 from mstorsjo/fix-chmod
Remove the executable bit from the API docs
2014-10-29 11:43:13 -07:00
Martin Storsjö
7f645bf2f7 Remove the executable bit from the API docs 2014-10-29 20:33:26 +02:00
huashi
54c24dfd60 refactor --for BaseEncoderTest 2014-10-29 17:53:08 +08:00
ruil2
c83ab3bca1 Merge pull request #1462 from sijchen/after_review1
updated documents from v1.2
2014-10-29 17:17:38 +08:00
ruil2
58cc29225e Merge pull request #1463 from sijchen/after_review4
[Encoder] for reference selection under screen
2014-10-29 17:17:07 +08:00
sijchen
d3a971e32c Merge pull request #1466 from shihuade/APIUTV1.5
set option for ParamExt----random cases
2014-10-29 14:41:46 +08:00
ruil2
329ccd7d6f Merge pull request #1464 from mstorsjo/unify-msvc-nasm
Revert unrelated changes to MSVC project file nasm commands
2014-10-29 09:55:20 +08:00
ruil2
f10f6a788f Merge pull request #1467 from mstorsjo/cabac-stash-fix
Don't stash the cabac state into the SBitStringAux buffer
2014-10-29 09:28:06 +08:00
Martin Storsjö
f84560474c Revert unrelated changes to MSVC project file nasm commands
The cabac encoder commit accidentally changed some of the nasm
commands in the MSVC project file, that were previously
made consistent in b17e9bb32 and 7720f2cc5.
2014-10-28 23:38:14 +02:00
Martin Storsjö
f2c1395ab6 Remove the pBuffer parameter from the entropy encoder stash functions
The parameter didn't make sense since it only pointed to the
pSliceBsa field, which isn't what should be used to stash
the cabac context.
2014-10-28 14:59:50 +02:00
Martin Storsjö
9a9f92bcfe Don't stash the cabac state into the SBitStringAux buffer
This fixes crashes on some platforms, and fixes valgrind
errors.
2014-10-28 14:59:50 +02:00
huashi
26615fffd0 set option for ParamExt----random cases 2014-10-28 20:36:33 +08:00
Sijia Chen
a2d5254bc3 update VERSION in Makefile 2014-10-28 17:57:57 +08:00
Sijia Chen
4fab8c2ee7 for reference selection under screen:
1, ref_list_mgr_svc.cpp, Ln314: fix a wrong DeleteLTRFromLongList which should not be used under screen strategy
2, ref_list_mgr_svc.cpp, Ln910: remove the frame which is furthest in distance to the current frame in ref list
3, wels_preprocess.cpp: use scene LTR ref list when the current frame is scene LTR
-, ref_list_mgr_svc.cpp, Ln811: add DEBUG trace
reviewed at: https://rbcommons.com/s/OpenH264/r/870/
2014-10-28 16:58:59 +08:00
sijchen
292d2511e2 Merge pull request #1457 from ruil2/enc_cabac
add encoder cabac support
2014-10-28 16:51:56 +08:00
Sijia Chen
4292f91ae5 add updated documents from v1.2 2014-10-28 13:55:37 +08:00
Ethan Hugg
5cefad2d3f Merge pull request #1460 from zaheerm/pkgconfig
Add .pc file generation to PHONY targets
2014-10-27 10:48:30 -07:00
Ethan Hugg
fcb84f5fb6 Merge pull request #1459 from tp-m/pkgconfig-install-fix
Fix openh264.pc file installation
2014-10-27 10:01:41 -07:00
Zaheer Abbas Merali
fe621b92bf Add .pc file generation to PHONY targets as version change in Makefile needs to cause a rebuild. 2014-10-27 10:00:13 -07:00
Tim-Philipp Müller
1ad797a81e Fix openh264.pc file installation
If there's no pkgconfig subdirectory yet in our
install prefix, create it first, otherwise we'll
end up with a file called 'pkgconfig' instead.
2014-10-27 16:22:58 +00:00
Ethan Hugg
9a72378c34 Merge pull request #1455 from zaheerm/pkgconfig
Add pkg-config file.
2014-10-27 09:01:18 -07:00
ruil2
ec901a14d6 Merge pull request #1456 from dongzha/fixRCOverFlow
fix Rc int32_t bitrate overflow
2014-10-27 13:08:54 +08:00
ruil2
abc01e6b81 add encoder cabac support 2014-10-27 13:06:33 +08:00
dong zhang
d3c8ade8d0 fix Rc int32_t bitrate overflow 2014-10-27 09:54:44 +08:00
Zaheer Abbas Merali
46d30cd33c Add pkg-config file. 2014-10-26 15:26:52 -07:00
ruil2
2dbb757d30 Merge pull request #1451 from sijchen/for_format
Fixes and change naming
2014-10-24 15:18:55 +08:00
sijchen
34cb0d60aa Merge pull request #1450 from mstorsjo/avoid-warnings
Add casts to avoid warnings about comparison between signed and unsigned
2014-10-24 14:41:51 +08:00
Sijia Chen
6a2a4efef6 fix names to keep consistent of style
improve UT to cover more cases under GetStatistics
2014-10-24 14:39:50 +08:00
Sijia Chen
ea9b80adb3 fix a wrong range clip 2014-10-24 14:12:53 +08:00
sijchen
468fce0887 Merge pull request #1448 from sijchen/for_format
roll back the file which is mis-formatted by astyle
2014-10-24 14:12:40 +08:00
Martin Storsjö
f0c6891627 Add casts to avoid warnings about comparison between signed and unsigned 2014-10-24 09:05:32 +03:00
Sijia Chen
50fd617e86 roll back the file which is mis-formatted by astyle 2014-10-24 13:04:35 +08:00
ruil2
ac290d65c7 Merge pull request #1446 from sijchen/for_format
[Encoder] fix a small range of slice idx
2014-10-24 12:50:07 +08:00
Sijia Chen
3cce92ea19 fix a small range of slice idx 2014-10-24 12:28:59 +08:00
huili2
dcdcc7f3b8 Merge pull request #1443 from dongzha/AddUTSwitch
add UT for sim-SVC layer switch
2014-10-24 10:21:36 +08:00
sijchen
273e1227a5 Merge pull request #1440 from shihuade/APIUTV1.4
fix bug in set option return value
2014-10-24 09:00:56 +08:00
sijchen
43c62d06eb Merge pull request #1439 from sijchen/for_format
[Reformat] format cpp files for next release
2014-10-24 09:00:36 +08:00
sijchen
5d6b20119a Merge pull request #1442 from mstorsjo/android-pthread-setname
Only use pthread_setname_np on Android >= 9 (2.3)
2014-10-24 09:00:09 +08:00
Ethan Hugg
a594ddf3e7 Merge pull request #1441 from mstorsjo/avoid-warnings
Add casts to avoid warnings about comparison between signed and unsigned
2014-10-23 09:07:19 -07:00
Martin Storsjö
0a3d4c4ebc Only use pthread_setname_np on Android >= 9 (2.3)
Older versions of Android don't have this function.
2014-10-23 15:36:40 +03:00
Martin Storsjö
57aae73d4c Add casts to avoid warnings about comparison between signed and unsigned 2014-10-23 14:20:38 +03:00
huili2
94a1d4426e Merge pull request #1437 from sijchen/after_review2
[Encoder] add a thread name for easier profiling
2014-10-23 18:03:24 +08:00
huili2
23b5a61153 Merge pull request #1429 from sijchen/add_statistics1
[Encoder] add EncoderStatistics
2014-10-23 18:02:23 +08:00
sijchen
33e67427ab Merge pull request #1438 from huili2/EC_crashfix
fix crash bug of sps/pps
2014-10-23 18:01:20 +08:00
Sijia Chen
4e89e71e8f reformat cpp files for unit tests 2014-10-23 17:54:33 +08:00
huashi
8d5863a170 fix bug in set option return value 2014-10-23 17:51:35 +08:00
Sijia Chen
97298de90a reformat cpp files for next release 2014-10-23 17:50:50 +08:00
huili2
3c4279cdd8 fix crash bug of sps/pps 2014-10-23 02:36:08 -07:00
sijchen
452fb868c7 Merge pull request #1432 from mstorsjo/rename-makefiles
Remove the "platform-" prefix from common shared makefiles
2014-10-23 16:40:22 +08:00
Sijia Chen
41720f8df5 add a thread name for easier profiling 2014-10-23 16:38:05 +08:00
dong zhang
769c38d4c4 add UT for sim-SVC switch 2014-10-23 15:50:43 +08:00
Ethan Hugg
195d13612c Merge pull request #1430 from mstorsjo/make-param-reorder
Set LDFLAGS after the object files in shared library linking commands
2014-10-22 09:04:12 -07:00
zhilwang
6c4f0d7d85 Merge pull request #1431 from mstorsjo/msvc-unify-nasm
Unify nasm commands in MSVC project files
2014-10-22 17:09:47 +08:00
Martin Storsjö
e415c3fe70 Remove the "platform-" prefix from common shared makefiles
This makes it clearer which ones actually are real platforms
(chosen automatically or explicitly via "make ARCH=foo") and which
ones just are shared helpers.
2014-10-22 10:18:53 +03:00
Martin Storsjö
b17e9bb320 Make nasm commands in vcproj files consistent
Some commands had different spacing than others, and commands
for some files had accidentally missed a few parameters.
2014-10-22 10:14:22 +03:00
Martin Storsjö
7720f2cc5d Add literal CRLF at the end of nasm commands that are missing them
These are added by MSVC as soon as the file is touched anyway.

This avoids stray changes to the files if the files are resaved
from within the IDE.
2014-10-22 10:14:08 +03:00
Martin Storsjö
88b7a62f98 Set LDFLAGS after the object files in shared library linking commands
This makes sure that the built libopenh264.so actually links to
libpthread.so.
2014-10-22 09:43:53 +03:00
Sijia Chen
a765197b73 add interface and basic implementaion and UT for EncoderStatistics 2014-10-22 11:35:17 +08:00
ruil2
d720122a37 Merge pull request #1426 from sijchen/fix_paramtranscode1
[Encoder] add clip in ParamTranscode for input para checking
2014-10-21 17:23:57 +08:00
Sijia Chen
cbe7891300 add clip in ParamTranscode for input para checking 2014-10-21 16:00:46 +08:00
ruil2
5762cbb8fc Merge pull request #1419 from sijchen/fix_sm4_mt
[Encoder] improve the logic of locking in the function
2014-10-17 16:32:40 +08:00
HaiboZhu
1a78f69f2f Merge pull request #1418 from huili2/EC_option_bugfix
ec disable bug fix
2014-10-17 10:09:39 +08:00
sijchen
d1a3bd3d33 Merge pull request #1416 from ruil2/fix
modify trace level and fix potential issues
2014-10-16 15:21:12 +08:00
ruil2
89454f0cf9 modify trace level and fix potential issues 2014-10-16 14:57:15 +08:00
huili2
9a0d56da97 Merge pull request #1412 from daniel-j-h/clang_cleanup
Clang's -Weverything and Static Analyzer's reports
2014-10-16 14:24:58 +08:00
huili2
d74c0f6ae6 Merge pull request #1414 from HaiboZhu/LTR_EC
Add picture bIsComplete flag to reflect the status of decoder
2014-10-16 14:22:43 +08:00
Haibo Zhu
9d182ee515 Add picture bIsComplete flag to reflect the status of decoder
Modify the output error status and add some some judgement
2014-10-15 11:36:24 -07:00
Sijia Chen
2479abf5c0 improve the logic of locking in the function 2014-10-15 17:46:59 +08:00
huili2
869c567f04 ec disable bug fix 2014-10-15 02:41:44 -07:00
Daniel J. Hofmann
cdb7e5da61 Removed accidentally committed vim swapfile 2014-10-15 09:12:19 +02:00
Daniel J. Hofmann
46ee46c186 Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' 2014-10-14 23:57:54 +02:00
Daniel J. Hofmann
d9e0f2b023 Wtautological-undefined-compare 2014-10-14 23:36:14 +02:00
Daniel J. Hofmann
39d725c113 Wnewline-eof 2014-10-14 23:23:50 +02:00
Daniel J. Hofmann
cab92a3e36 Wheader-hygiene 2014-10-14 23:11:59 +02:00
Daniel J. Hofmann
ba535bda4d Wextra-semi 2014-10-14 22:56:57 +02:00
Daniel J. Hofmann
2ff61475d6 Wc++11-extra-semi 2014-10-14 22:21:06 +02:00
Daniel J. Hofmann
1e62aafcde Wc++11-extensions 2014-10-14 22:20:10 +02:00
Daniel J. Hofmann
4fc27714bd Wc++11-compat-reserved-user-defined-literal 2014-10-14 22:16:42 +02:00
Ethan Hugg
3ad4d9070e Merge pull request #1410 from dabenham/master
Update RELEASES
2014-10-13 11:04:05 -07:00
dabenham
024ac63f15 Update RELEASES
Removed links to iOS binaries.
2014-10-13 10:59:56 -07:00
huili2
614e898b67 Merge pull request #1408 from HaiboZhu/Add_UT_Deblocking
Fix bugs WelsDeblockingFilterSlice UT when random value is 0
2014-10-10 17:24:36 +08:00
Ethan Hugg
3885bd8f0e Merge pull request #1406 from mstorsjo/fix-warnings
Fix compiler warnings about comparison between signed and unsigned

Fix bugs WelsDeblockingFilterSlice UT when random value is 0
2014-10-09 19:51:58 -07:00
Ethan Hugg
b425450bc1 Merge pull request #1406 from mstorsjo/fix-warnings
Fix compiler warnings about comparison between signed and unsigned
2014-10-09 08:28:09 -07:00
Martin Storsjö
ad247a9a4a Fix compiler warnings about comparison between signed and unsigned 2014-10-09 11:58:23 +03:00
huili2
f9bab05b3a Merge pull request #1402 from HaiboZhu/Add_UT_Deblocking
Add ut deblocking
2014-10-09 09:04:55 +08:00
Ethan Hugg
52419bd13e Merge pull request #1400 from mstorsjo/warning-fix
Fix compiler warnings
2014-10-02 12:26:45 -07:00
ruil2
8c8cd50c96 Merge pull request #1403 from sijchen/fr_setting_fix1
[Encoder] Add checking of frame rate and temporal layer setting
2014-09-30 21:40:31 +08:00
Sijia Chen
68fed53687 add checking of frame rate and temporal layer setting for encoder input param
Reviewed at https://rbcommons.com/s/OpenH264/r/836/
2014-09-30 17:54:24 +08:00
Haibo Zhu
b7c54242a9 Modify the random value range which only for debug
Modify the CLIP3 macros to match the CLIP3(value, min, max)
Add partly UT cases into it which related to function call
Modify the typo for WELS_NEON
Add partly UT cases into it which related to Bs calculation
Update Windows VS project
2014-09-30 01:36:18 -07:00
Haibo Zhu
04c2a7ac5c Add CLIP3 and using ASSERT_FALSE macros 2014-09-30 01:36:18 -07:00
Haibo Zhu
27a21edcc9 Modify the targets.mk 2014-09-30 01:36:18 -07:00
Haibo Zhu
3593f2e3e7 Add partly UT code for deblocking filter 2014-09-30 01:36:18 -07:00
HaiboZhu
007fb47004 Merge pull request #1399 from huili2/ParseOnlyAPI
add API only for decode parser
2014-09-30 14:51:49 +08:00
Martin Storsjö
0affe66f93 Remove unused variables 2014-09-30 08:57:29 +03:00
Martin Storsjö
311272d341 Use the right log format for printing 64 bit integers 2014-09-30 08:56:40 +03:00
huili2
efdefdba28 add API only for decode parser for HW decoding support 2014-09-29 19:14:58 -07:00
dongzha
a3a0effc88 Merge pull request #1398 from shihuade/APIUT_V1
refator for API test--prepareEncDecParam and EncodeOneFrame
2014-09-30 10:05:31 +08:00
shihuade
d875d923f8 refator for API test--prepareEncDecParam and EncodeOneFrame 2014-09-29 19:58:43 +08:00
ruil2
6b1630cc90 Merge pull request #1396 from lyao2/rc_trace2
add debug info for RC max bitrate control test
2014-09-29 17:09:28 +08:00
lyao2
3904c025cb add debug info for RC max bitrate control test 2014-09-29 15:41:03 +08:00
dongzha
72df20000b Merge pull request #1391 from sijchen/modi_stra34
[Encoder] Fix a warning and refactor
2014-09-29 08:34:44 +08:00
dongzha
fd8d41dbb9 Merge pull request #1392 from dongzha/addMissedFileInVSUT
add missed files in VS UT solution
2014-09-29 08:33:35 +08:00
dongzha
07fa3d1898 add missed files in VS UT solution 2014-09-28 15:20:47 +08:00
Sijia Chen
6673a5f71e 1, fix a value in preprocess to avoid warning in UT
2, refactor to wrap the operation to m_pSpatialPic into WelsPreprocess
2014-09-28 13:12:16 +08:00
ruil2
e4b373a800 Merge pull request #1390 from sijchen/modi_stra25
[Encoder Screen] Add basic strategy for lossy+no LTR route (still in progress)
2014-09-26 17:11:49 +08:00
Sijia Chen
cf2cf9efd9 add basic strategy for lossy+no LTR route 2014-09-26 16:40:19 +08:00
ruil2
6ae38da3ab Merge pull request #1389 from zhilwang/issue-fix
Fix crash issue due to commit 8945348.
2014-09-26 11:43:34 +08:00
zhiliang wang
19c02bdfa8 Fix crash issue due to commit 8945348. 2014-09-26 11:16:13 +08:00
ruil2
bab0bf18f8 Merge pull request #1387 from dongzha/MoveDoubleInSCCRC
remove double in SCC rc
2014-09-25 16:53:46 +08:00
huili2
8945348c87 Merge pull request #1385 from ruil2/function
enable ARM assembly for SampleSad16x16
2014-09-25 15:04:46 +08:00
ruil2
ed341048de refine common moudle for part of intra prediction function 2014-09-25 14:03:11 +08:00
ruil2
73d27e9776 Merge pull request #1386 from huili2/UT_bugfix_dataformat
bug fix for dataformat UT
2014-09-25 13:05:25 +08:00
ruil2
bef3d87f34 Merge pull request #1384 from sijchen/add_para21
[Encoder] Add a new reading para
2014-09-25 12:45:38 +08:00
dong zhang
9f20c727d1 remove double in SCC rc 2014-09-25 11:09:35 +08:00
huili2
810d20a59d bug fix for dataformat UT 2014-09-24 18:04:24 -07:00
sijchen
d0f9b218f4 Merge pull request #1383 from ruil2/rc_refine
refine scc rc
2014-09-24 16:31:49 +08:00
ruil2
ffebbdb9b2 enable ARM assembly for SampleSad16x16 2014-09-24 15:59:36 +08:00
ruil2
4e57a46ca5 Merge pull request #1382 from huili2/dataformat_bugfix
add protection for decoder and data format
2014-09-24 13:47:02 +08:00
ruil2
c618cb1eaf refine scc rc 2014-09-24 09:54:01 +08:00
huili2
a3bdf4ffc9 Merge pull request #1378 from sijchen/ref_refac22
[Encoder] Refactor a function for further strategy adjustment
2014-09-24 08:59:02 +08:00
Sijia Chen
147c9052b8 add reading of the new option 2014-09-23 18:04:24 +08:00
ruil2
cfbf32b3fb Merge pull request #1381 from mstorsjo/silence-warnings
Silence warnings with gcc in GetOptionTid_AVC_NOPREFIX
2014-09-23 17:21:54 +08:00
huili2
f8d2ae42ef add protection for decoder and data format 2014-09-23 00:29:23 -07:00
Martin Storsjö
a59a989d9b Silence warnings with gcc in GetOptionTid_AVC_NOPREFIX 2014-09-23 09:39:18 +03:00
HaiboZhu
06e56ecdd8 Merge pull request #1380 from huili2/ec_option_free
add freely setoption for EC_idc and UT
2014-09-22 15:51:19 +08:00
huili2
f6fb459a7f add freely setoption for EC_idc and UT 2014-09-21 21:51:48 -07:00
sijchen
fd8db0451e Merge pull request #1377 from ruil2/scc_rc_1
add scc rate control
2014-09-19 17:08:48 +08:00
Sijia Chen
ee2f87dbbc refactor a function for further strategy adjustment 2014-09-19 16:17:04 +08:00
ruil2
17df23c2eb Merge pull request #1375 from sijchen/ref_refac11
[Encoder] Use function pointer for pEndofUpdateRefList
2014-09-19 16:01:14 +08:00
ruil2
480ff5acc2 Merge pull request #1374 from sijchen/ref_refac41
[Encoder UT] Add parameter and one case in UT
2014-09-19 16:00:44 +08:00
ruil2
66e38cc9ed add scc rate control 2014-09-19 15:56:49 +08:00
Sijia Chen
c480ffdad5 use function pointer as refactoring for further strategy adjustment 2014-09-19 14:48:45 +08:00
Sijia Chen
84ca659f06 add parameter and one case in UT 2014-09-19 14:46:02 +08:00
ruil2
25cad576b3 Merge pull request #1372 from huili2/remove_release111
remove release note for internal v1.1.1
2014-09-18 17:27:13 +08:00
huili2
f5b9d920ff Merge pull request #1369 from ruil2/console
set timestamp for each input frame to preparing for scc rate control
2014-09-18 14:46:28 +08:00
sijchen
64fa8a6b60 Merge pull request #1371 from ruil2/win_project
update interface definition
2014-09-18 14:38:58 +08:00
ruil2
ac2de4cbab Merge pull request #1370 from dongzha/addAPIUTTid
Add Tid/Trace API UT and Fix a bug when set NULL trace
2014-09-18 14:29:26 +08:00
ruil2
3ba0a9956a update interface definition 2014-09-18 14:20:16 +08:00
huili2
c4a446b43a Merge pull request #1367 from ruil2/rename
rename namespace and funciton name to avoid conflicts with old library
2014-09-18 13:23:27 +08:00
ruil2
880bf2d621 set timestamp for each input frame to preparing for scc rate control 2014-09-18 12:12:15 +08:00
ruil2
1d37250301 Merge pull request #1368 from sijchen/remove_dul2
[Encoder] Remove duplicate constant macro and modify the num_ref check accordingly
2014-09-18 09:12:41 +08:00
Sijia Chen
7e71714863 add a missed line in last commit 2014-09-17 18:13:43 +08:00
Sijia Chen
05684744c9 remove duplicate constant macro and modify the num_ref check accordingly 2014-09-17 18:10:27 +08:00
ruil2
3ff145e839 rename namespace and funciton name to avoid conflicts with old library 2014-09-17 15:50:59 +08:00
ruil2
25b723c413 Merge pull request #1366 from lyao2/refine_frameskip2
fix skipframe count error
2014-09-17 15:19:40 +08:00
lyao2
ca96def4ff fix skipframe count error 2014-09-17 14:26:05 +08:00
dongzha
c213c6ba30 1. add Tid API UT
2. add Trace UT
3. Fix a crash issue when set NULL trace
2014-09-17 09:26:54 +08:00
dongzha
8538b22f23 Merge pull request #1359 from mstorsjo/cleanup-simplification
Simplify code by getting rid of unnecesary SafeDelete/SafeFree macros
2014-09-17 08:49:24 +08:00
dongzha
399ca33284 Merge pull request #1356 from ruil2/memory
refine memory tag in order to trace issues related memory
2014-09-17 08:46:02 +08:00
Ethan Hugg
4e54fd191b Merge pull request #1361 from mstorsjo/avoid-comparing-uninitialized
Make sure uiIDRPicId is initialized within EncodeDecodeTest
2014-09-16 08:39:22 -07:00
Ethan Hugg
19dcff8616 Merge pull request #1360 from mstorsjo/use-correct-delete
Use the correct version of delete within a unit test
2014-09-16 08:38:20 -07:00
Ethan Hugg
68e92f9eb6 Merge pull request #1358 from mstorsjo/remove-unused-macro
Remove an unused macro
2014-09-16 08:36:22 -07:00
Ethan Hugg
5c67f368c3 Merge pull request #1357 from mstorsjo/silence-warnings
Fix build warnings with gcc in EncodeDecodeTest
2014-09-16 08:35:39 -07:00
Martin Storsjö
a6cc71208e Make sure uiIDRPicId is initialized within EncodeDecodeTest
This fixes valgrind warnings about comparison with uninitialized
values.
2014-09-16 11:59:09 +03:00
Martin Storsjö
58eba54e8c Use the correct version of delete within a unit test
This fixes valgrind warnings when running this test. The mismatched
delete could also potentially have caused memory corruption issues
while running the tests.
2014-09-16 11:57:24 +03:00
Martin Storsjö
9d9c609aab Remove some now unused macros 2014-09-16 11:53:19 +03:00
Martin Storsjö
958113073f Simplify code by calling WelsFree directly instead of using a helper function
This makes the code simpler and clearer. It's not necessary to use the
_SafeFree helper macro in neither of the case - in one case the
pointer is overwritten immediately, in the other case it's witihin
the destructor where the pointer won't ever be read again.
2014-09-16 11:53:19 +03:00
Martin Storsjö
37ae6505d4 Use delete instead of the _SafeDelete macro
Since this is the destructor of the class, the member variables
won't be read afterwards, and setting the pointers to NULL afterwards
is redundant.
2014-09-16 11:53:19 +03:00
Martin Storsjö
c5091e73be Remove unnecesary use of _SafeDelete
It is not necessary to check whether a pointer is NULL before
deleting it, "delete NULL" is explicitly ok.

The deleted pointer is a local variable here, so setting it to
NULL after deleting isn't necessary in these cases either.
2014-09-16 11:53:19 +03:00
Martin Storsjö
8eafdfa598 Remove an unused macro 2014-09-16 11:52:06 +03:00
Martin Storsjö
e7cd53e81b Fix build warnings with gcc in EncodeDecodeTest
Avoid a comparison between signed and unsigned integers, and avoid
a warning about a variable which is set but not used.
2014-09-16 10:10:57 +03:00
dongzha
f8d5f93b16 Merge pull request #1355 from syureyi/clean
Clean
2014-09-16 09:58:27 +08:00
huili2
48f203929e remove release note for internal v1.1.1 2014-09-15 18:54:48 -07:00
ruil2
b85a09163f refine memory tag in order to trace issues related memory 2014-09-16 09:49:44 +08:00
HaiboZhu
49ce86c78a Merge pull request #1354 from lyao2/fix_qualitymode_bug2
Fix bug RC_QUALITY_MODE not works as expected
2014-09-15 15:55:26 +08:00
lyao2
72862118f9 Fix bug RC_QUALITY_MODE not works as expected 2014-09-15 15:31:20 +08:00
lyao2
631ca210a8 Fix bug RC_QUALITY_MODE not works as expected 2014-09-15 13:21:29 +08:00
huili2
b51ff51387 Merge pull request #1350 from lyao2/ut_interface2
add encoder Interface additional option set test
2014-09-15 09:15:28 +08:00
huili2
4001551027 Merge pull request #1349 from dongzha/AddAPIUTEncoder_Decoder
add encoder/decoder api test for LTR and EC flag
2014-09-15 09:15:08 +08:00
ruil2
458cc6b4fd Merge pull request #1351 from lyao2/bitrate_mode
enlarge QP range when skipframeflag off on BitRate mode
2014-09-12 16:09:37 +08:00
lyao2
522aa4457a enlarge QP range when skipframeflag off on BitRate mode 2014-09-12 14:45:08 +08:00
dongzha
311f7006fd 1. add encoder-engine-decoder API UT for: IDR request, LTR request
2. add decoder api UT for EC: Disable/Enable EC
3. Fix a decoder bug when EC is disabled
   itoltalMbDec should be set to zero when encouter a new sequence/picture, even   when EC is disabled.
2014-09-12 11:12:59 +08:00
zhuiling
9913b73cb1 improve py and mk 2014-09-12 10:30:56 +08:00
zhuiling
9e7a19291c improve py 2014-09-12 10:29:07 +08:00
zhuiling
0fe477625c improve py, and change mk according to mk 2014-09-12 10:25:46 +08:00
zhuiling
6b64efbf92 improve py 2014-09-12 09:59:46 +08:00
zhuiling
235f6e3474 improve py 2014-09-12 09:56:51 +08:00
zhuiling
77552551f7 py improvement according to Martin's sugesstion 2014-09-12 09:39:14 +08:00
lyao2
679cc4ac6c Merge pull request #1346 from ruil2/ltr_limit
using default value for LTR.
2014-09-11 13:02:02 +08:00
ruil2
c6a136c742 using default value for LTR. 2014-09-11 10:32:46 +08:00
ruil2
1a394d1432 Merge pull request #1343 from huili2/ec_disable_set
disable EC SetOption
2014-09-10 15:15:49 +08:00
dongzha
bffbde9f45 Merge pull request #1342 from ruil2/update_pic
update spatial picture when abnormal exit
2014-09-10 13:38:18 +08:00
huili2
84848bb7d3 disable EC SetOption 2014-09-09 20:12:01 -07:00
ruil2
bb43c1c9a9 update spatial picture when abnormal exit 2014-09-10 09:45:32 +08:00
ruil2
f003fa1fe6 Merge pull request #1341 from sijchen/enable_ltr01
[Encoder] fix a LTR range problem when LTR num is larger than 2
2014-09-10 08:51:44 +08:00
ruil2
1df4cd43cc Merge pull request #1338 from sijchen/add_setoption
[Encoder] remove unsupported lines in cfg to avoid misleading
2014-09-09 15:38:26 +08:00
Sijia Chen
6f553c9742 remove unused lines 2014-09-09 15:09:07 +08:00
Sijia Chen
79157ce632 fix a LTR range problem when LTR num is larger than 2 2014-09-09 15:05:57 +08:00
Sijia Chen
a6df69c305 remove unsupported lines in cfg to avoid misleading 2014-09-09 14:20:27 +08:00
zhuiling
a1dbf6ab13 make clean without OS ARCH except android platform 2014-09-05 16:38:28 +08:00
dongzha
ef590de0dc Merge pull request #1335 from lyao2/fixppsbug
fix pps caused death loop issue
2014-09-05 14:18:16 +08:00
huili2
684c42536d Merge pull request #1330 from ruil2/delivery_status
modify delivery status interface
2014-09-05 13:32:52 +08:00
lyao2
881667a533 fix pps caused death loop issue 2014-09-05 13:28:13 +08:00
ruil2
4fc144b698 Merge pull request #1333 from huili2/print_ver_master
modify version info in enc/dec
2014-09-05 13:23:49 +08:00
huili2
1b1ea2b9ef modify version info in enc/dec 2014-09-04 21:55:06 -07:00
ruil2
d63172db9b Merge pull request #1331 from sijchen/add_setoption
[Encoder] add setoption of 'isLosslessLink' for further strategy tuning
2014-09-05 12:49:25 +08:00
ruil2
2f041c7a4b modify delivery status interface 2014-09-05 10:57:51 +08:00
huili2
43dc6f01e1 Merge pull request #1322 from ruil2/MinCr_waring
add MinCr checking and output warings if the MinCr isn't met
2014-09-05 09:39:56 +08:00
sijchen
61926f208c add a setoption for further setting 2014-09-04 14:24:14 +08:00
ruil2
199d19a785 Merge pull request #1328 from lyao2/fix_maxbitrate
fix bug that iMaxSpatialBitrate is not correct assigned
2014-09-04 13:06:24 +08:00
lyao2
7c95ccc6a7 update SHA1Table 2014-09-04 11:07:35 +08:00
lyao2
f2437f24b9 fix bug that iMaxSpatialBitrate is not correct assigned 2014-09-03 17:40:19 +08:00
huili2
c287a9109f Merge pull request #1324 from ruil2/ltr_check_update
add UT for LTR setopton and fix crash issue
2014-09-03 15:51:23 +08:00
dongzha
3735cfc1bd Merge pull request #1323 from huili2/ps_ne_deal
when sps/pps non exist, return dsNoParamSets
2014-09-03 13:56:56 +08:00
dongzha
315d9315c4 Merge pull request #1325 from huili2/ps_ne_deal_v1.1.1
when sps/pps non exist, return dsNoParamSets
2014-09-03 13:56:30 +08:00
ruil2
7e8cde055f add UT for LTR setopton and fix crash issue 2014-09-03 13:28:14 +08:00
huili2
0227f87b7a when sps/pps non exist, return dsNoParamSets 2014-09-02 22:22:18 -07:00
huili2
d98fd57252 when sps/pps non exist, return dsNoParamSets 2014-09-02 22:06:05 -07:00
ruil2
4ece8efaed add MinCr checking and output warings if the MinCr isn't met 2014-09-03 10:41:54 +08:00
dongzha
cef43e30fe Merge pull request #1321 from ruil2/ltr_check
avoid LTR reference frames overflow
2014-09-02 15:50:04 +08:00
lyao2
15124b1258 fix bug 2014-09-02 13:41:00 +08:00
ruil2
b5a01efa96 avoid LTR reference frames overflow 2014-09-02 10:23:03 +08:00
lyao2
aa7eb5fd09 code refine 2014-09-02 09:21:31 +08:00
lyao2
849a730608 refine code 2014-09-01 17:49:59 +08:00
lyao2
24bd0b74ae add additional option set test 2014-09-01 16:35:32 +08:00
ruil2
c1cc195ab1 Merge pull request #1319 from huili2/release_note_1.1.1
add release note for v1.1.1
2014-08-29 14:41:46 +08:00
huili2
06ab5b1934 Merge pull request #1318 from ruil2/threadIdc
fix auto threadIdc issue
2014-08-29 14:30:26 +08:00
ruil2
d4eff959ed fix auto threadIdc issue 2014-08-29 13:57:08 +08:00
huili2
77e01435c0 add release note for v1.1.1 2014-08-28 22:40:17 -07:00
ruil2
43e1c46756 Merge pull request #1317 from mstorsjo/avoid-uninitialized-test
Avoid using uninitialized memory in the motion estimation tests
2014-08-28 17:29:16 +08:00
ruil2
3ff6bf8ac1 Merge pull request #1315 from dongzha/RemoveIntraPeriod
Fix following IntraPeriod set issue
2014-08-28 17:09:10 +08:00
Martin Storsjö
5809db9eff Avoid using uninitialized memory in the motion estimation tests 2014-08-28 11:51:39 +03:00
zhilwang
22e7750bb3 Merge pull request #1316 from mstorsjo/avoid-warnings
Avoid warnings about comparison between signed and unsigned
2014-08-28 16:42:02 +08:00
dong zhang
0187c84f29 Fix following IntraPeriod set issue
1. In WelsInitSps function, if kuiIntraPeriod is huge, uiLog2MaxFrameNum might be bigger than 15, which may introduce illegal H264 bitstream.
2. if pSvcParm.uiIntraPeriod is not zero (e.g. 14) at the initial, it will init sps.iLog2MaxPocLsb. to 5.
 But if I changed pSvcParm.uiIntraPeriod to 40, sps.iLog2MaxPocLsb. is still 5, need to recalcuted this parameter.
 (Same with uiLog2MaxFrameNum.)
2014-08-28 16:35:23 +08:00
Martin Storsjö
c3710c4130 Avoid warnings about comparison between signed and unsigned
There's no need for these variables to be explicitly unsigned.
This also matches the function above.
2014-08-28 11:13:38 +03:00
huili2
2361f7543b Merge pull request #1314 from ruil2/add_trace
update trace output
2014-08-28 15:59:56 +08:00
ruil2
cafb91a66a remove redundent lines 2014-08-28 11:24:28 +08:00
ruil2
cebf586c3a update trace output 2014-08-28 11:04:25 +08:00
dongzha
40ca34ae13 Merge pull request #1312 from huili2/win_ut_debug_env
add gtest debug environment for MSVC
2014-08-28 10:47:19 +08:00
dongzha
67b5a79c2e Merge pull request #1313 from huili2/SDP_support
add decoder capability info
2014-08-28 10:47:12 +08:00
huili2
76c6ff4b0f add gtest debug environment for MSVC 2014-08-27 17:58:59 -07:00
huili2
0b23d0facb add decoder capability info 2014-08-27 17:48:58 -07:00
dongzha
9b97138786 Merge pull request #1310 from ruil2/trace_update_1
add warning trace
2014-08-27 17:35:14 +08:00
dongzha
674af41108 Merge pull request #1309 from zhilwang/downsample-ut
Add UT for Downsample functions.
2014-08-27 17:27:20 +08:00
ruil2
8935bfaa91 Merge pull request #1308 from dongzha/ModifyEncOutput
add crop output for encoder
2014-08-27 17:04:49 +08:00
ruil2
770400103f add warning trace 2014-08-27 17:01:23 +08:00
dong zhang
6d4a628331 add crop output for encoder 2014-08-27 15:44:49 +08:00
zhiliang wang
93af7bfc64 Add UT for Downsample functions. 2014-08-27 15:40:14 +08:00
dongzha
81f7b0c108 Merge pull request #1306 from zhilwang/vaa-ut
Add UT for VaaCalc Functions.
2014-08-27 14:56:35 +08:00
dongzha
dcc3d90574 Merge pull request #1307 from ruil2/trace_update
remove "\n" which shoudl be added by the trace sink
2014-08-27 14:56:29 +08:00
ruil2
40e952f981 remove "\n" which shoudl be added by the trace sink 2014-08-27 14:34:05 +08:00
zhiliang wang
0163eb520d Add UT for VaaCalc Functions. 2014-08-27 13:53:18 +08:00
dongzha
bac5511694 Merge pull request #1305 from ruil2/ltr_update_1
update the number of reference when ltr changes
2014-08-27 13:21:01 +08:00
ruil2
9b5902b94a update the number of reference when ltr changes 2014-08-27 12:19:59 +08:00
dongzha
035019f052 Merge pull request #1304 from ruil2/mv_get_fix
get mv and mvd from level limitation
2014-08-27 12:16:15 +08:00
ruil2
ac7fac9644 get mv and mvd from level limitation 2014-08-26 16:30:57 +08:00
ruil2
0951c8fc0c Merge pull request #1303 from lyao2/fix_pps
fix pps assert related issue when enable bEnableSpsPpsIdAddition
2014-08-26 14:50:24 +08:00
lyao2
0c32465aac fix pps assert issue when enable bEnableSpsPpsIdAddition 2014-08-26 13:31:14 +08:00
dongzha
863dc78c25 Merge pull request #1301 from ruil2/ltr_check_1
add more LTR parameters
2014-08-26 12:22:27 +08:00
ruil2
d6f0dee0c4 add more LTR parameters 2014-08-26 11:06:30 +08:00
dongzha
ced2a8e4bc Merge pull request #1300 from ruil2/mvcost_check_1
remove unused variables
2014-08-26 11:04:37 +08:00
Karina
ddbd41cbc5 remove unused variables 2014-08-26 09:13:20 +08:00
huili2
a4eea4c64d Merge pull request #1299 from ruil2/mvcost_check_1
fix crash on mvd cost calculation
2014-08-25 16:38:16 +08:00
Karina
11c9f2037d format update 2014-08-25 15:31:36 +08:00
Karina
a19974d009 fix crash on mvd cost calculation 2014-08-25 13:30:45 +08:00
dongzha
7486bb1100 Merge pull request #1297 from ruil2/overflow_mv_1
add mv range limitation and related ut
2014-08-25 13:12:09 +08:00
dongzha
94815cf993 Merge pull request #1298 from dongzha/AddDecoderAPIUTFrameNumNew
add encoder/decoder api test for IDR id and framenum
2014-08-25 13:10:25 +08:00
dong zhang
8da63eae33 1. add encoder/decoder api test for IDR id and framenum
2. use random value as input, instead of using *.264
2014-08-25 11:02:31 +08:00
ruil2
441dc45e69 add mv range limitation and related ut 2014-08-25 09:53:49 +08:00
zhilwang
153a0311db Merge pull request #1293 from huili2/contributor
add new contributors
2014-08-22 11:01:45 +08:00
HaiboZhu
dddb825bbd Merge pull request #1288 from lyao2/threadIDC
fix Loop filter error under multithreads on encoder when #TEST_BED enabled
2014-08-22 11:00:07 +08:00
HaiboZhu
eb6fb7fc72 Merge pull request #1294 from zhilwang/arm-ut
Add arm UT for Sad,IntraSad,IntraPred.
2014-08-22 10:59:09 +08:00
lyao2
6047ff930e fix deblockIDC and mutithread logic error 2014-08-22 09:19:14 +08:00
zhiliang wang
e6f838e331 Add arm UT for Sad,IntraSad,IntraPred. 2014-08-21 15:36:57 +08:00
huili2
fd9a9e521f add new contributors 2014-08-20 23:50:52 -07:00
dongzha
3f839e367c Merge pull request #1292 from zhilwang/EncDemo_refine
Refine EncDemo.
2014-08-21 14:22:08 +08:00
ruil2
7fb9e57f30 Revert "ut_win32"
This reverts commit 462f56d413.
2014-08-21 10:07:03 +08:00
zhiliang wang
e3d8524c82 Refine EncDemo. 2014-08-21 09:10:49 +08:00
ruil2
28fa2e7c98 Merge pull request #1287 from syureyi/ut_win32
ut_win32
2014-08-20 12:08:42 +08:00
lyao2
47f1ac7307 fix Loop filter error under multithreads on encoder when #TEST_BED enabled 2014-08-20 11:54:07 +08:00
unknown
462f56d413 ut_win32 2014-08-20 10:46:05 +08:00
ruil2
b230a6deee Merge pull request #1285 from dongzha/TestRandomEnc
avoid encoder crash with random pixel input
2014-08-19 16:47:36 +08:00
dongzha
3596b6ced0 avoid encoder crash with random pixel input 2014-08-19 15:36:27 +08:00
huili2
d3dc48d1d1 Merge pull request #1284 from syureyi/perf
Perf
2014-08-18 12:52:44 +08:00
lingzhu
f4054f2633 Update run_AutoTest_android.sh
at now, need not such log file
2014-08-18 09:45:21 +08:00
lingzhu
fc9203cb50 Update run_AutoTest_ios.sh
typo wrong, need to copy
2014-08-18 09:44:07 +08:00
huili2
45d95d2f50 Merge pull request #1281 from mstorsjo/fix-arm-alignment
Fix building svc_motion_estimation.S for android
2014-08-15 15:17:09 +08:00
Martin Storsjö
81ac3d2a9b Fix building svc_motion_estimation.S for android
The .align directive takes an argument in number of bits, i.e. the
actual alignment is 2^n. Previously building with binutils failed,
since 16 isn't a valid parameter to .align, the maximum is 15.

Thus, this makes the code try to align to 16 bytes, instead of aligning
to 65536 bytes.

This fixes building for android.

This also clears up the same mistake in the aarch64 code, even though
that one built just fine.
2014-08-15 09:53:42 +03:00
dongzha
464244ccbe Merge pull request #1280 from mstorsjo/arm-common-ifdefs
Add ifdef HAVE_NEON around the contents of arm_arch_common_macro.S
2014-08-15 14:19:14 +08:00
HaiboZhu
955d27b3a2 Merge pull request #1278 from syureyi/perf
improve perf
2014-08-15 14:18:01 +08:00
zhilwang
e25a82b3d6 Merge pull request #1279 from dongzha/NewAddARMHash
add arm32/64 code for InitHash
2014-08-15 14:14:51 +08:00
Martin Storsjö
f69c9074e7 Add ifdef HAVE_NEON around the contents of arm_arch_common_macro.S
This file is built on its own from within the xcode projects,
even though it isn't necessary. Previously its contents was just
empty, but now a .syntax unified was added, which failed the build
when building for arm64.

Make this file a no-op, just like the other arm assembly source files,
unless HAVE_NEON is defined.
2014-08-15 08:49:31 +03:00
HFVideoMac
0f95fac4ca add arm32/64 code for InitHash 2014-08-15 13:47:59 +08:00
Ethan Hugg
4b5e893fcc Merge pull request #1277 from huili2/modify_releases_master
release note for master
2014-08-14 19:32:06 -07:00
dongzha
87107c50a3 Merge pull request #1275 from zhilwang/x86_hash_scc
Add x86 32/64bit asm code and UT for SCC hash functions
2014-08-15 10:12:18 +08:00
huili2
f9448ced69 release note for v1.1.0 2014-08-14 19:11:58 -07:00
zhiliang wang
ef88889404 refine format and add UT cases 2014-08-15 09:22:37 +08:00
huili2
136e169c01 Merge pull request #1270 from mstorsjo/android-tool-detect
Check for $(CXX).exe as well when checking for the android toolchain
2014-08-15 09:12:15 +08:00
huili2
a893e22311 Merge pull request #1266 from mstorsjo/fix-readme
Stop referring to a removed make variable
2014-08-15 09:12:06 +08:00
zhilwang
711f5cabe7 Merge pull request #1273 from dongzha/RefineArmCodeForSumBlock
refine arm code for sum of frame
2014-08-15 09:02:15 +08:00
zhiliang wang
76863f977a Refine asm code format 2014-08-15 08:46:55 +08:00
zhiliang wang
b35f5797de Add x86 32/64bit asm code for Scc_hash 2014-08-14 18:41:52 +08:00
HaiboZhu
1e34a61dd6 Merge pull request #1269 from huili2/enc_console_help
correct enc console help info
2014-08-14 17:07:16 +08:00
HaiboZhu
42384c0cb4 Merge pull request #1274 from huili2/test_VclNal
enable api test for decoder VclNal
2014-08-14 17:06:45 +08:00
huili2
f82726d7ef enable api test for decoder VclNal 2014-08-14 00:52:21 -07:00
dongzha
d243608611 Merge pull request #1272 from zhilwang/x86_hash_scc
Add function define and init for SCC hash function
2014-08-14 14:49:43 +08:00
HFVideoMac
e14186b535 refine arm code for sum of frame 2014-08-14 14:41:07 +08:00
zhiliang wang
9d2e1a9384 Merge branch 'master' of https://github.com/cisco/openh264 into x86_hash_scc 2014-08-14 14:38:18 +08:00
zhiliang wang
dc833e19f4 Add function define and init for SCC hash function 2014-08-14 14:20:07 +08:00
dongzha
2b26a28d15 Merge pull request #1271 from dongzha/fixBuildError
Fix build error ARM
2014-08-14 13:16:40 +08:00
dongzha
3703ba16a4 Fix build error ARM 2014-08-14 12:54:36 +08:00
dongzha
186f4c0d29 Merge pull request #1267 from zhilwang/sumofblocks_scc
Add x86 32/64bit asm code for SumOfBlocks.
2014-08-14 10:12:55 +08:00
Martin Storsjö
0f9c2dbb12 Check for $(CXX).exe as well when checking for the android toolchain
This fixes building for android on windows.

Building for android on windows still requires MSYS for running make,
but running the ndk-build of the sample projects from within MSYS
doesn't seem to work (the OS variable from the OpenH264 makefile
interferes with the host system detection in ndk-build), so one still
needs to build it in two steps, first make OS=android ... libopenh264.so,
then building the sample projects manually.
2014-08-13 14:23:09 +03:00
huili2
e346bc5263 correct enc console help info 2014-08-12 23:25:27 -07:00
zhiliang wang
f2314151e8 Add x86 32/64bit asm code for SumOfBlocks. 2014-08-13 11:18:39 +08:00
syureyi
2ac973474a improve perf 2014-08-12 14:29:39 +08:00
Martin Storsjö
a2b727fb6b Stop referring to a removed make variable
Nothing uses the make variable GCCVERSION any longer, since we just
query the NDK for the default compiler.
2014-08-12 09:11:15 +03:00
huili2
681b1da698 Merge pull request #1265 from ruil2/namespace_2
merge level table
2014-08-12 10:06:59 +08:00
ruil2
493d254a4a merge level table 2014-08-12 09:28:40 +08:00
huili2
49f8fe8c5c Merge pull request #1264 from ruil2/namespace_1
use WelsEnc namespace instead of WelsSVCEnc
2014-08-11 16:55:11 +08:00
ruil2
f7cd6e7aad use WelsEnc namespace instead of WelsSVCEnc 2014-08-11 16:08:49 +08:00
dongzha
57f4548daf Merge pull request #1262 from ruil2/fix_errors
fix an errors that for single slice mode, the number of slices should be 1
2014-08-11 14:31:41 +08:00
ruil2
febb3ebb9b fix an errors that for single slice mode, the number of slices should be 1 2014-08-11 13:58:33 +08:00
ruil2
5948e8af3f Merge pull request #1259 from mstorsjo/fix-singlecpu-tests
Remove a needless, no-op change of the number of threads
2014-08-11 13:31:57 +08:00
dongzha
7b3bf074b3 Merge pull request #1258 from mstorsjo/fetch-codec-params
Get the actual used parameters in the codec in TemporalLayerSettingTest
2014-08-11 10:53:28 +08:00
dongzha
6190c10de8 Merge pull request #1256 from mstorsjo/speedup-tests
Speed up test cases in EncoderInterfaceTest
2014-08-11 10:47:44 +08:00
dongzha
f8e5d3a7bf Merge pull request #1250 from huili2/test_EndOfStream
test end of stream for decoder API UT
2014-08-11 10:34:07 +08:00
zhilwang
46f1c898c6 Merge pull request #1257 from mstorsjo/fixup-apple-assembly
Explicitly add .syntax unified when building for iOS
2014-08-11 08:40:27 +08:00
Martin Storsjö
352f5eea7a Get the actual used parameters in the codec in TemporalLayerSettingTest
Make sure that pOptions is initialized to the parameters that
the codec actually uses, not the ones that we initially tried
to set.

When calling SetOption to update the codec parameters, this may
cause a reset of the whole codec if e.g. the number of threads
differs from what is set within the codec itself.

If the number of threads was changed by the codec internally
when inited (e.g. changed from 0 to 1), WelsEncoderParamAdjust
may think the whole codec needs to be reset.

This fixes running EncoderInterfaceTest.TemporalLayerSettingTest
on machines where the detected number of cores is 1.
2014-08-08 22:57:22 +03:00
Martin Storsjö
2f6a986d7c Remove a needless, no-op change of the number of threads
If kiCpuCores < 2, then iCountThreadsNum (and iMultipleThreadIdc)
can't be >= 2, because they're initialized with
WELS_MIN (kiCpuCores, ...) just a few lines above.

If iMultipleThreadIdc is initially set to 0 by the caller, this
removed piece of code would change it to 1, if kiCpuCores < 2.

When iMultipleThreadIdc is changed from the originally set value,
a call to WelsEncoderParamAdjust with the original parameters
would reset the whole codec since iMultipleThreadIdc differs.

This fixes running EncoderInterfaceTest.TemporalLayerSettingTest
on machines where the detected number of cores is 1.
2014-08-08 22:26:59 +03:00
Martin Storsjö
38d2d64ede Explicitly add .syntax unified when building for iOS
This is the default when building with the clang built-in assembler,
but not if using the external assembler - thus always specify it,
for clarity.

Also use the three-operand for of a sub instruction in BS_NZC_CHECK.
The same is already done in the gnu version of the macro.

This fixes building most of the arm assembly with Apple's external
assembler. While this isn't a necessary goal in itself, there's no
harm in doing this either.
2014-08-08 14:09:37 +03:00
huili2
dacd22d695 Merge pull request #1254 from mstorsjo/alias-attribute
Add attributes incidating intentional data type aliasing, fix GetIntraPredictorTest on android
2014-08-08 17:36:07 +08:00
lyao2
03af36dc54 Merge pull request #1255 from ruil2/param_change
re-allocate resource when threadIDC changes
2014-08-08 17:29:21 +08:00
Martin Storsjö
38cc9acdd3 Set a specific frame size in TemporalLayerSettingTest
Previously, this test used whatever size was set in m_iWidth
and m_iHeight before, which depended on the order that the tests
were executed. When this test was the first one executed in the
EncoderInterfaceTest, the width and height were set to the max.

Instead of having the test behaviour depend on the test order,
set a specific size, just as InitializeParamExt and MemoryCheckTest
do.

This reduces the runtime of TemporalLayerSettingTest from 86 seconds
to 26 seconds, when run in valgrind.
2014-08-08 12:24:57 +03:00
Martin Storsjö
c3702d9075 Reduce the number of frames tested in EncoderInterfaceTest
There's little point in running the same test over and over for
a huge number of frames if it doesn't test much different things.

This reduces the runtime of EncoderInterfaceTest.* from 322 seconds
to 140 seconds, when running in valgrind.
2014-08-08 12:23:12 +03:00
ruil2
af417b5ae4 re-allocate resource when threadIDC changes 2014-08-08 16:43:38 +08:00
Martin Storsjö
642b405f87 Reenable GetIntraPredictorTest tests that were broken on android
These tests work as intended now.
2014-08-08 11:34:45 +03:00
Martin Storsjö
5f0ef6a5a9 Add attributes incidating intentional data type aliasing
Interpreting data of one type via a pointer of a different type is an
aliasing violating. This means that a compiler optimizer's analyzer
can assume that data loaded into an array as uint32_t isn't related
to data read out from the same array as uint64_t, and e.g. reorder
loads/stores.

Since these structs are intentionally used to load data via pointers
of a wrong size, tell the compiler that these accesses may alias
other reads.

This fixes the GetIntraPredictorTest tests of WelsI4x4LumaPredV_c
and WelsI4x4LumaPredH_c. (The compiler optimizer did the wrong thing
as long as WelsFillingPred8to16_c or WelsFillingPred8x2to16_c were
inlined into the calling function.)
2014-08-08 11:34:45 +03:00
zhilwang
0b85855e98 Merge pull request #1253 from dongzha/FixBugandBuildErroronAndroid
Disable failed UT and Fix  Build Error onAndroid
2014-08-08 13:33:31 +08:00
HFVideoMac
84f33aa8e4 Disable failed UT and Fix Build Error onAndroid 2014-08-08 10:53:23 +08:00
zhilwang
439e51bc11 Merge pull request #1249 from dongzha/addArm32SCCNew
add arm 32/64 code and UT for SVC SCC motion estimation
2014-08-08 09:19:51 +08:00
HaiboZhu
ef1098be9c Merge pull request #1251 from syureyi/sendmail
improve the shell scripts
2014-08-07 17:28:54 +08:00
syureyi
a5707738b7 improve the shell scripts 2014-08-07 15:43:08 +08:00
dongzha
4ebf8266a1 Merge pull request #1247 from mstorsjo/test-seed
Print the random seed at startup
2014-08-07 10:09:47 +08:00
dongzha
00d0180f26 Merge pull request #1248 from mstorsjo/silence-intentional-errors
Silence warnings and errors when running tests that intentionally produce errors
2014-08-07 10:09:35 +08:00
Martin Storsjö
e8fafebd96 Silence warnings and errors when running tests that intentionally produce errors 2014-08-06 21:32:08 +03:00
Martin Storsjö
df16cd9d0c Print the random seed at startup
Also add an option for overriding the seed at startup.

This allows reproducing temporary issues by rerunning the test suite
with the same random seed.

Note that if tests are added or removed (or tests are skipped by passing
the --gtest_filter option), or if running on a different libc, the same
seed might result in different random values.
2014-08-06 19:32:25 +03:00
HFVideoMac
cff49f5e45 add arm 32/64 code and UT for SVC SCC motion estimation 2014-08-06 17:24:36 +08:00
huili2
3aec3a2606 Merge pull request #1245 from zhilwang/processing_sad
Add sad arm64 code to processing.
2014-08-06 09:31:22 +08:00
huili2
0dd0b06287 Merge pull request #1243 from ruil2/comment
add parameter verification
2014-08-05 14:58:01 +08:00
huili2
ed12e6aa46 test end of stream for decoder API UT 2014-08-04 23:46:11 -07:00
zhiliang wang
3139fe7a88 Add sad arm64 code to processing. 2014-08-05 11:23:38 +08:00
lyao2
11bf575892 Merge pull request #1244 from ruil2/slice_limit
this limitation of the number of MBs is removed in dynamic slice mode
2014-08-01 16:41:19 +08:00
ruil2
5356249100 if dynamic slice mode, this limitation should be removed 2014-08-01 16:10:11 +08:00
ruil2
059e19074a add parameter verification 2014-08-01 12:39:29 +08:00
ruil2
11f0a11177 Merge pull request #1242 from huili2/test_dataformat
setget_dataformat_ut
2014-08-01 12:27:38 +08:00
huili2
ecfd7df157 Merge pull request #1237 from syureyi/mobileutat
Mobileutat
2014-07-31 17:15:16 +08:00
HaiboZhu
aa41dc43bd Merge pull request #1241 from ruil2/comment
fix typo
2014-07-31 16:52:04 +08:00
HaiboZhu
2ac06c4a61 Merge pull request #1240 from ruil2/output-1
update recontruct frame output
2014-07-31 16:51:33 +08:00
ruil2
2ec91a0bbe fix typo 2014-07-31 15:14:10 +08:00
ruil2
f68b0811f0 update recontruct frame output 2014-07-31 15:10:12 +08:00
lingzhu
baf82f1b32 Update run_unitTest.sh 2014-07-31 14:37:20 +08:00
Ethan Hugg
681919da8e Merge pull request #1238 from mstorsjo/fix-msvc-tests
Fix building the tests with MSVC
2014-07-30 06:53:30 -07:00
Martin Storsjö
8c663ffe66 Use the common stdint typedefs in processing as well
This fixes building test/processing/ProcessUT_AdaptiveQuantization.cpp
with MSVC.
2014-07-30 13:53:54 +03:00
Martin Storsjö
a1bc5fa1b5 Include test_stdint.h to get stdint types for MSVC 2014-07-30 13:51:52 +03:00
lyao2
cd4a615c43 Merge pull request #1233 from ruil2/interface_ut_1
add a judgment
2014-07-29 12:01:19 +08:00
ruil2
8dd5d483d4 remove test case because this issue had been fixed 2014-07-29 11:05:48 +08:00
huili2
e8fdd4cf75 setget_dataformat_ut 2014-07-28 18:41:58 -07:00
ruil2
eff4b3ae4d add a judgment 2014-07-29 09:37:14 +08:00
ruil2
d2896038b8 Merge pull request #1230 from lyao2/ut_fixbug
fix param initialization bug in UT
2014-07-29 09:33:06 +08:00
lyao2
4ee434691a fix param initialization bug in UT 2014-07-28 17:43:56 +08:00
HaiboZhu
d0d6842f73 Merge pull request #1228 from huili2/dec_ut_api_module
add decoder UT module for API
2014-07-28 16:29:09 +08:00
huili2
adc7be9f01 add decoder UT module for API 2014-07-28 00:33:18 -07:00
zhilwang
4afb83e3b0 Merge pull request #1227 from mstorsjo/unify-asm-indentation
Unify the indentation in the new aarch64 assembly files
2014-07-28 15:33:01 +08:00
Martin Storsjö
ae62909aab Unify the indentation in the new aarch64 assembly files 2014-07-28 09:23:36 +03:00
zhilwang
964e98fb76 Merge pull request #1226 from mstorsjo/arm64-fix-missing-endm
Add a missing .endm in the gnu version of macros
2014-07-28 14:20:49 +08:00
Martin Storsjö
3240a14baa Add a missing .endm in the gnu version of macros 2014-07-28 09:01:24 +03:00
zhilwang
8fb6677266 Merge pull request #1225 from mstorsjo/fix-chmod
Clear the executable bit for new arm64 assembly source files
2014-07-28 13:49:08 +08:00
Martin Storsjö
79276c38dd Clear the executable bit for new arm64 assembly source files 2014-07-28 08:29:01 +03:00
syureyi
4335167792 change the /sdcard/ and also alignment format 2014-07-28 13:25:27 +08:00
HaiboZhu
39d490b23d Merge pull request #1224 from huili2/ec_flag_modif
modify EC API name and remove useless flag
2014-07-28 13:06:23 +08:00
huili2
933c477717 modify EC API name and remove useless flag 2014-07-27 21:35:26 -07:00
huili2
8e2d92e5c9 Merge pull request #1218 from zhilwang/arm64_vaa
Arm64 vaa
2014-07-28 09:30:16 +08:00
ruil2
91bbd18d2e Merge pull request #1222 from mstorsjo/fix-test-valid-size
Don't set iPicWidth or iPicHeight to 0 in random tests
2014-07-26 10:23:59 +08:00
Martin Storsjö
6543900747 Don't set iPicWidth or iPicHeight to 0 in random tests
This should fix occasional failures in the EncoderInterfaceTests,
such as in https://travis-ci.org/cisco/openh264/jobs/30815104.
2014-07-25 20:14:55 +03:00
huili2
e286144524 Merge pull request #1220 from ruil2/interface_ut
add encoder interface ut
2014-07-25 17:41:38 +08:00
ruil2
e58de20f3a add encoder interface ut 2014-07-25 16:40:14 +08:00
syureyi
b53f8909de astyle 2014-07-25 14:41:06 +08:00
syureyi
30e510e307 ss 2014-07-25 14:37:14 +08:00
zhilwang
b1a76aa936 Merge pull request #1215 from mstorsjo/x86-asm-noexec-stack
Mark the x86 assembly object files as not requiring an executable stack
2014-07-25 14:15:17 +08:00
zhiliang wang
7932845674 Refine code style. 2014-07-25 14:07:24 +08:00
zhiliang wang
de624c0972 Add arm64 code for vaa. 2014-07-25 14:07:24 +08:00
syureyi
f78f395683 checking the scripits for unittest automatically on mobile 2014-07-25 14:05:36 +08:00
syureyi
a22d976b4e checking the scripits for unittest automatically on mobile 2014-07-25 14:05:21 +08:00
zhilwang
6ba537bee5 Merge pull request #1203 from dongzha/AddAQArm64
add ARM64 Adaptative Quantization code and UT
2014-07-25 13:46:10 +08:00
huili2
8b3aa2d826 Merge pull request #1217 from ruil2/crash_update
fix crash bugs that too large size local varialbe will cause stack overflow
2014-07-25 13:09:32 +08:00
ruil2
4d0c832b47 Merge pull request #1216 from lyao2/ut_bs_commit3
add interface UT for RC and code refactor
2014-07-25 13:06:05 +08:00
ruil2
1c42743999 fix crash bugs that too large size local varialbe will cause stack overflow 2014-07-25 09:55:41 +08:00
ruil2
7624b360f0 Merge pull request #1214 from mstorsjo/use-min-qp
Actually use iMinQp in WelRcPictureInitBufferBasedQp
2014-07-25 09:47:15 +08:00
huili2
a8286234bb Merge pull request #1204 from syureyi/mobile_AT
Mobile at
2014-07-25 08:52:20 +08:00
Martin Storsjö
d5a45ec513 Mark the x86 assembly object files as not requiring an executable stack
This avoids having to add extra linker flags in order to specify this.

This is similar to how this already is handled for the arm assembly.
2014-07-25 00:56:39 +03:00
Martin Storsjö
a365b42d3b Consistently use -f elf instead of -f elf32
The freebsd platform file already did things like this.
2014-07-25 00:54:13 +03:00
Martin Storsjö
d215a5f879 Actually use iMinQp in WelRcPictureInitBufferBasedQp
This fixes a warning in certain builds, about the variable iMinQp
being set but not used. This also probably is what was intended originally.
2014-07-25 00:46:35 +03:00
Ethan Hugg
ab1778a523 Merge pull request #1213 from jld/noexecstack
Don't request executable stacks for Linux GMP plugin.
2014-07-24 11:31:54 -07:00
Jed Davis
cf0ac5504b Don't request executable stacks for Linux GMP plugin.
The codec seems to work without executable stack memory, and in general
executable stacks should be avoided if possible, but the assembler used
for the .asm source files requests it.  This commit adds a linker option
to override that.
2014-07-24 10:55:03 -07:00
Ethan Hugg
ed4db186a1 Merge pull request #1207 from mstorsjo/android-compiler-check
Check that a working android toolchain was found
2014-07-24 08:20:16 -07:00
Ethan Hugg
0b80b7fa79 Merge pull request #1206 from mstorsjo/version-generate-deps
Fix generating version.h in parallel make builds (make -jX)
2014-07-24 08:18:56 -07:00
Martin Storsjö
4433740722 Fix the name of the version generation makefile target 2014-07-24 17:02:40 +03:00
Martin Storsjö
8253049383 Add dependencies to generating version.h in the object files that use it
Previously the makefile didn't know that there was any dependency between
compiling welsDecoderExt.o and welsEncoderExt.o and the regeneration
of the version.h header. This meant that in parallel builds (make -jX),
make could try to regenerate version.h while compiling welsDecoderExt.o
and welsEncoderExt.o, which would lead to errors about version.h not
existing.

Also add some spacing around the makefile rules.

This fixes parallel make building in certain cases.
2014-07-24 17:02:40 +03:00
jesup
300cceaabf Merge pull request #1211 from ethanhugg/ff34-apichanges
Update for new GMP API changes in FF34
2014-07-24 09:23:46 -04:00
Ethan Hugg
06d92c4ed1 Update for new GMP API changes in FF34 2014-07-24 05:38:21 -07:00
lyao2
562f38afff add interface UT for RC and code refactor 2014-07-24 17:27:55 +08:00
Martin Storsjö
33a7e02261 Check that a working android toolchain was found
If the user selects a nonexistent ARCH, previously the call that
sets TOOLCHAINPREFIX would set it to contain a long error message,
which makes it quite hard to figure out what actually went wrong.

Instead check that CXX=$(TOLCHAINPREFIX)g++ actually points to a
working executable, and abort immediately if this isn't true.
2014-07-24 01:09:45 +03:00
huili2
470246c20f Merge pull request #1195 from mstorsjo/msvc-unify-linker-opts
Set MSVC linker debug options consistently in the project files
2014-07-23 13:29:14 +08:00
HFVideoMac
910c64ef22 add ARM64 Adaptative Quantization code and UT 2014-07-22 15:07:25 +08:00
syureyi
c12cf3b2a0 add .gitignore and also typo 2014-07-22 14:01:27 +08:00
dongzha
5397265021 Merge pull request #1202 from zhilwang/processing-refine
Add arm64 downsample code to processing project
2014-07-22 13:01:51 +08:00
Ethan Hugg
7847f69eab Merge pull request #1200 from ruil2/decoder_ret_1
add decoder return value
2014-07-21 19:37:58 -07:00
zhiliang wang
e2425df06c Add arm64 downsample code to processing project 2014-07-22 10:16:55 +08:00
ruil2
78650363b8 add decoder return value 2014-07-22 09:43:18 +08:00
syureyi
9b11f25300 also format the file 2014-07-21 16:26:33 +08:00
syureyi
f3a5655754 also delete spaces 2014-07-21 16:15:03 +08:00
syureyi
69be28bd1b delete spaces in the file 2014-07-21 16:09:05 +08:00
zhilwang
123b904f77 Merge pull request #1199 from dongzha/AddResArm64master
Add Unit Test and ARM64 code for block_add (for master)
2014-07-21 15:41:39 +08:00
syureyi
a555639dd2 check in the code for do codec performance testing on mobile 2014-07-21 15:31:43 +08:00
HFVideoMac
0d1699b67f Add Unit Test and ARM64 code for block_add 2014-07-21 14:37:52 +08:00
zhilwang
9ac7cd2816 Merge pull request #1191 from mstorsjo/merge-encdemo-include-paths
Set the encDemo header paths on the target level
2014-07-18 17:01:46 +08:00
zhilwang
3797aa1a14 Merge pull request #1194 from mstorsjo/msvc-simplify-output-dirs
Use macros for setting the output directory in MSVC project files
2014-07-18 16:59:28 +08:00
zhilwang
811e20f0d9 Merge pull request #1185 from mstorsjo/android-l-preview
Fix building for the Android L preview release, add support for new 64 bit Android ABIs
2014-07-18 16:56:22 +08:00
Martin Storsjö
71e59fd31c Set MSVC linker debug options consistently in the project files 2014-07-18 11:26:26 +03:00
Martin Storsjö
f26c7e3f4f Use macros for setting the output directory
This makes sure this is set to the exact same string in all
the configurations, simplifying editing multiple configurations
at the same time.

This changes the output directory for 64 bit binaries from
bin/win64 to bin/x64, but this is the common pattern used by
MSVC in new projects.
2014-07-18 11:23:48 +03:00
huili2
7e3812c970 Merge pull request #1148 from mstorsjo/dont-hardcode-xcode-archs
Don't hardcode the valid architectures in one xcode project
2014-07-18 09:24:31 +08:00
huili2
2627c05117 Merge pull request #1130 from mstorsjo/default-intermediates-path
Use default paths for and object files and other intermediate files
2014-07-18 09:23:30 +08:00
jesup
6b67aa3516 Merge pull request #1192 from ethanhugg/info-file
Update info file for bugzilla 1037754 - no longer need to advertise VP8.
2014-07-17 16:37:38 -04:00
Martin Storsjö
8d22836ecd Set the encDemo header paths on the target level
Currently half of them are set on the project level, and half of them
on the target level.

In all other projects within OpenH264, they're set on the target level.
2014-07-17 17:41:06 +03:00
Ethan Hugg
df8623dce1 Merge pull request #1149 from mstorsjo/unify-build-active-arch
Unify the setting "Build Active Architecture Only"
2014-07-17 07:18:24 -07:00
Martin Storsjö
fa8e56e944 Unify the setting "Build Active Architecture Only"
Set it to Yes in Debug configurations, set on the project level
(not at the target level).
2014-07-17 12:36:49 +03:00
huili2
288e2b3cdf Merge pull request #1188 from ruil2/trace_tag
fix reference frame update issue which will casue crash
2014-07-17 13:40:31 +08:00
ruil2
63e3c6588a fix reference frame update issue which will casue crash 2014-07-17 12:45:17 +08:00
dongzha
a0320dac5d Merge pull request #1186 from huili2/diff_logic_WME_master
modify the logic for WME usage
2014-07-17 10:43:49 +08:00
dongzha
74b52e8a31 Merge pull request #1183 from ruil2/trace_tag
add trace tag
2014-07-17 10:43:14 +08:00
ruil2
ef7cce3d14 modify trace output 2014-07-17 10:09:52 +08:00
huili2
a0e569da81 modify the logic for WME usage 2014-07-16 18:14:53 -07:00
dongzha
396249fedc Merge pull request #1171 from shihuade/ReleaseV2.2
update binary comparison test script
2014-07-17 08:43:14 +08:00
dongzha
cd026ef166 Merge pull request #1152 from mstorsjo/xcode-inherit-include-paths
Include inherited header search paths in all projects
2014-07-17 08:42:15 +08:00
dongzha
2db10df5c6 Merge pull request #1180 from huili2/dpb_green_issue_master
solve green issue combined with EC and multi-packet input
2014-07-17 08:41:27 +08:00
dongzha
2a83a85eb7 Merge pull request #1151 from mstorsjo/unify-deployment-target
Set the iOS deployment target consistently
2014-07-17 08:40:39 +08:00
Ethan Hugg
948356993b Update info file for bugzilla 1037754 - no longer need to advertise VP8. 2014-07-16 13:40:28 -07:00
Ethan Hugg
990bdda615 Merge pull request #1181 from mstorsjo/generate-version
Fix generating the version header when building outside of the source tree
2014-07-16 13:19:11 -07:00
Martin Storsjö
22f04159bb Fix incorrect indentation in build/platform-android.mk 2014-07-16 21:33:14 +03:00
Martin Storsjö
04f066ae7c Add support for building for the new 64 bit android ABIs
This requires the new NDK r10.

The mips64 ABI is handled by the default case, there's no need to
add custom code for that in platform-android.mk.
2014-07-16 21:32:54 +03:00
Martin Storsjö
9aaeef9264 Manually define the SWelsTime struct on unix, don't rely on struct timeb
We don't use the ftime function on unix for filling SWelsTime anyway,
we fill the time and millitm fields manually.

On android, the sys/timeb.h header has been removed in the next
platform version (currently available in NDK r10 in the "L preview"
release), since this header and the ftime function have been removed
from the POSIX 2008 specification.

This fixes compilation when targeting the Android "L preview" release,
even when targeting the 32 bit ABIs.
2014-07-16 21:32:18 +03:00
Martin Storsjö
6966679f33 Remove unused includes of sys/timeb.h
This header is included by crt_util_safe_x.h whenever necessary (it's
all hidden in the SWelsTime struct) - code which does not explicitly
use things from sys/timeb.h shouldn't include it.
2014-07-16 21:31:07 +03:00
Martin Storsjö
71c5acc7a1 Remove outdated advice from the readme
We no longer use the GCCVERSION variable - we let the NDK pick whichever
compiler version is the default for the chosen architecture.
2014-07-16 21:28:01 +03:00
ruil2
b9058e4987 add trace tag 2014-07-16 16:49:53 +08:00
Martin Storsjö
93e9694bc6 Fix generating the version header when building outside of the source tree
Also silence this command in silent builds.
2014-07-16 10:40:45 +03:00
huili2
efdb0cd2e2 Merge pull request #1175 from ruil2/scc_ut
enable hashcode verification for screen content
2014-07-16 14:00:16 +08:00
huili2
e63dad0b6c Merge pull request #1172 from ruil2/pause_remove
remove pause frame interface which will be done in application level
2014-07-16 13:57:46 +08:00
ruil2
29bb1df645 Merge pull request #1177 from huili2/version_all
version-generate
2014-07-16 10:35:20 +08:00
ruil2
f94a20d7b5 Merge pull request #1174 from huili2/border_green_master
expand pic for EC
2014-07-16 10:01:02 +08:00
Ethan Hugg
5c3e16842d Merge pull request #1141 from mstorsjo/outoftree
Support building outside of the source tree
2014-07-15 12:33:04 -07:00
Martin Storsjö
27499895f7 Support building outside of the source tree
This allows building two versions for different architectures at
the same time, without the built files clobbering each other.

This is very helpful when trying to track down differences between
two build configurations.

To build outside of the source tree, create the other directory to
use for building (either outside of the openh264 directory, or as
a subdirectory), enter that directory, and do
"make -f path/to/openh264/Makefile".
2014-07-15 20:40:51 +03:00
shihuade
c1a9beeab8 update binary comparison test script 2014-07-15 06:42:42 -04:00
Martin Storsjö
c9a6482fc6 Use default paths for and object files and other intermediate files
This makes sure that one can build for all architectures without
having the intermediates from one clobber the other.
2014-07-15 13:00:56 +03:00
huili2
9626596421 Merge pull request #1143 from mstorsjo/remove-stray-option
Remove a stray option set on only one MSVC project
2014-07-15 17:56:38 +08:00
huili2
b7ea251e95 Merge pull request #1142 from mstorsjo/remove-unused-hardcoded-paths
Don't set a custom path to browse information files, when no browse information is generated
2014-07-15 17:55:46 +08:00
huili2
d7f3331c9d solve green issue combined with EC and multi-packet input 2014-07-15 02:51:20 -07:00
huili2
7f36b244f7 Merge pull request #1158 from HaiboZhu/Debug_codenomicon_3_015584
Debug for InitRefPicList
2014-07-15 17:50:51 +08:00
ruil2
832bf7c45d Merge pull request #1176 from lyao2/ut_memcheck
add interface UT for memory align check
2014-07-15 16:37:27 +08:00
lyao2
d633f8584a add interface UT for memory align check 2014-07-15 15:21:54 +08:00
ruil2
aaedb508c3 enable hashcode verification for screen content 2014-07-15 14:41:29 +08:00
huili2
333cf6aa97 version-generate 2014-07-14 23:39:31 -07:00
huili2
b02f75f608 expand pic for EC 2014-07-14 23:28:46 -07:00
ruil2
010e423b2b Merge pull request #1169 from sijchen/interfaceUT12
[Encoder UT] Interface: EncoderEncodeParameterSets
2014-07-15 14:20:18 +08:00
ruil2
3632a0331c remove pause frame interface which will be done in application level 2014-07-15 11:05:05 +08:00
ruil2
4a518655a6 Merge pull request #1170 from huili2/reuse_no_param_master
reuse dsNoParamSets in dec
2014-07-15 10:40:33 +08:00
huili2
c4fc6642cf reuse dsNoParamSets in dec 2014-07-14 18:47:40 -07:00
Ethan Hugg
2791929e03 Merge pull request #1167 from mstorsjo/remove-unused-variable
Remove an unused variable
2014-07-14 07:54:54 -07:00
Ethan Hugg
b6b7bb7680 Merge pull request #1153 from mstorsjo/silence-error-testing
Silence error logging while running tests that are intended to produce errors
2014-07-14 07:53:45 -07:00
Martin Storsjö
110ce9ceca Remove an unused variable
This fixes build warnings with clang on OS X.
2014-07-14 15:44:26 +03:00
Sijia Chen
b669801e89 add interface UT for WelsEncoderEncodeParameterSets
and fix previous value
2014-07-14 18:36:35 +08:00
lyao2
3a37586970 Merge pull request #1162 from sijchen/interfaceUT11
[Encoder] add interface UT for ForceIntraFrame
2014-07-14 16:10:20 +08:00
Sijia Chen
d1123a8bb1 remove blank lines 2014-07-14 15:34:40 +08:00
Sijia Chen
bc76a8f9b3 add interface UT for ForceIntraFrame 2014-07-14 15:30:01 +08:00
huili2
c36f864682 Merge pull request #1159 from ruil2/scc_rc_1
add buffer based rc
2014-07-14 14:21:11 +08:00
ruil2
36cfb3bd32 add buffer based rc 2014-07-14 13:57:03 +08:00
ruil2
4cdee3b2d1 Merge pull request #1150 from mstorsjo/unify-sdk-setting
Don't hardcode the sdk on the target level
2014-07-12 16:02:49 +08:00
ruil2
bd560b474a Merge pull request #1147 from mstorsjo/avoid-hardcoded-xcode-paths
Don't hardcode an include path to the xcode default toolchain
2014-07-12 16:02:20 +08:00
Ethan Hugg
d49e7208fb Merge pull request #1155 from ethanhugg/gmpapi-ff33
Updated to match gmp-api changes for Firefox33
2014-07-11 12:00:06 -07:00
Ethan Hugg
ee4166ebea Merge pull request #1154 from mstorsjo/runtest-abort-errors
Abort directly on errors in the unit test in run_Test.sh
2014-07-11 09:00:49 -07:00
Ethan Hugg
3bc9b47465 Changed gmp-api branch to master and astyled the changes. 2014-07-11 08:42:51 -07:00
Ethan Hugg
1acb0fb89f Updated to match gmp-api changes for Firefox33 2014-07-11 08:29:02 -07:00
Martin Storsjö
0ee2562004 Silence error logging while running tests that are intended to produce errors
The errors in the test log are distracting, making it look like
a test actually failed.
2014-07-11 12:47:52 +03:00
Martin Storsjö
db476bac57 Abort directly on errors in the unit test in run_Test.sh
Currently it runs all four unit test builds, and an error in any
of the earlier three ones will be missed as long as the fourth one
succeeds.
2014-07-11 12:31:19 +03:00
Martin Storsjö
edb9872473 Include inherited header search paths in all projects 2014-07-11 11:41:23 +03:00
Martin Storsjö
301ccb1081 Set the iOS deployment target consistently
Set it on the project level, don't override it on the target level.

Set the deployment target to 6.0 everywhere.
2014-07-11 11:39:08 +03:00
Martin Storsjö
c0c51eb73e Don't hardcode the sdk on the target level
It's already set on the project level, and this is the default
value anyway.

This was the only project where the sdk was set on the target level.
2014-07-11 11:27:22 +03:00
Martin Storsjö
e9610e465e Don't hardcode the valid architectures in one xcode project
There's no reason to hardcode these here - these are the default.
(We keep the intentionally hardcoded default arch in the
codec_unittest project though.)
2014-07-11 11:20:10 +03:00
Martin Storsjö
b63b13e6f0 Don't hardcode an include path to the xcode default toolchain
The necessary system include paths are already inherited, and manually
forcing this location can cause conflicts if using different versions
of xcode installed in parallel.

None of the other xcode projects hardcode this path.
2014-07-11 11:11:32 +03:00
huili2
140a67dfc9 Merge pull request #1144 from syureyi/openh264xcode
add openh264 xcode and adjust processing xcode project
2014-07-11 15:33:41 +08:00
lyao2
e02f5ba3cd Merge pull request #1145 from sijchen/interfaceUT11
add BasicInitialize UT and fix in existing interface test
2014-07-11 14:04:29 +08:00
Haibo Zhu
cbc5f3bf4b Remove the call function parameter. 2014-07-10 22:54:35 -07:00
Sijia Chen
99dc18c0ba add BasicInitialize UT and some fix in create/destroy encoder in the existing interface test 2014-07-11 13:50:58 +08:00
Haibo Zhu
79891067e9 Debug for codenomicon bits, when one picture contains diff types of slices(I, P),may request null ref list. 2014-07-10 20:17:18 -07:00
syureyi
a3800d205d add openh264 xcode and adjust processing xcode project 2014-07-10 20:47:27 -06:00
dongzha
da0f65ea0a Merge pull request #1140 from zhilwang/x86_64-downsample
Add X86 64bit asm code for downsample
2014-07-11 08:48:45 +08:00
huili2
6310017877 Merge pull request #1139 from huili2/parse_fail_master
add return info for all cases
2014-07-10 17:48:18 +08:00
ruil2
c72f82e7a7 Revert "turn off LTR for screen content. after checking LTR logic, will turn on"
This reverts commit 0fda3d9235.
2014-07-10 16:20:54 +08:00
Martin Storsjö
0dc2c3b031 Remove a stray option set on only one MSVC project
No other projects create browse information, and browse information
for the decConsole project alone doesn't help much. This is also
only enabled in debug mode, further indicating that this option is
only enabled accidentally, not by purpose.
2014-07-10 10:16:58 +03:00
Martin Storsjö
21691a6741 Don't set a custom path to browse information files, when no browse information is generated
These projects never had browse information generation enabled.
2014-07-10 10:15:30 +03:00
zhilwang
d4baad0dcb Merge pull request #1134 from mstorsjo/aarch64-ext
Use the correct syntax for the aarch64 ext instructions
2014-07-10 14:17:17 +08:00
huili2
209c607020 add return info for all cases 2014-07-09 23:06:40 -07:00
Martin Storsjö
d5c71dbe2f Use the correct syntax for the aarch64 ext instructions
Since Xcode 5.1, the apple tools actually support using the
official, correct syntax for the ext instructions. This syntax
is already used in a number of places already - use it consistently,
and get rid of the compatibility hacks.
2014-07-10 08:53:41 +03:00
huili2
019fb9e20e Merge pull request #1132 from mstorsjo/unify-encoder-opts
Unify optimization options within the encoder MSVC projects
2014-07-10 13:50:48 +08:00
dongzha
0cafc565be Merge pull request #1121 from ruil2/interface_update_1
interface update
2014-07-10 10:15:30 +08:00
zhiliang wang
eaf7d65518 Align C version to asm function. 2014-07-10 09:38:07 +08:00
ruil2
0110e5df55 Merge pull request #1137 from ethanhugg/gmpapi-bybranch32
Pull gmp-api by branch name
2014-07-10 09:33:19 +08:00
ruil2
4edc5f60a1 Merge pull request #1126 from mstorsjo/android-simplify
Avoid repeated code for getting the android toolchain prefix
2014-07-10 09:31:57 +08:00
ruil2
7bb422803d Merge pull request #1131 from mstorsjo/avoid-hardcoding-paths
Use $(OutDir) instead of hardcoding the directory name
2014-07-10 09:30:37 +08:00
ruil2
2531e26da1 Merge pull request #1133 from dongzha/SpeedupArm64Neon
speed up memory loading in arm64 MC
2014-07-10 09:29:47 +08:00
ruil2
d070f9e7f2 Merge pull request #1135 from mstorsjo/msvc-make-debug-option
Set -Zi instead of -ZI when building with MSVC in debug mode
2014-07-10 09:28:29 +08:00
ruil2
1dd5a7a866 Merge pull request #1119 from mstorsjo/update-gitignore
Ignore files produced by the new binary comparison tool
2014-07-10 09:28:12 +08:00
ruil2
70e9ff3a33 Merge pull request #1128 from mstorsjo/reduce-prepare-compilation
Only build the needed binaries in run_PrepareAllTestData.sh
2014-07-10 09:27:20 +08:00
Ethan Hugg
17c14d44e2 Pull gmp-api by branch name 2014-07-09 14:51:16 -07:00
Martin Storsjö
a11fdcd647 Set -Zi instead of -ZI when building with MSVC in debug mode
The -ZI option is only supported when building for 32 bit x86,
when building for x64 or for arm, it gives the warning "/ZI is
not supported on this platform; enabling /Zi instead".

-ZI is for "edit & continue" debugging, which one probably wouldn't
be doing with a build outside of the IDE anyway, so keep it simple
instead of trying to set -ZI specifically for x86 32 bit builds.
2014-07-09 15:13:41 +03:00
dongzhang
beaf7c1893 speed up memory loading in arm64 MC 2014-07-09 18:22:42 +08:00
Martin Storsjö
e5eed1f65b Remove stray optimization options from the WelsEncPlus project
There's not much performance critical code within this lib, all
the performance critical code in the encoder is in WelsEncCore and
WelsVP, so there's little point in having an extra odd option enabled
here.
2014-07-09 13:14:08 +03:00
Martin Storsjö
ac0e5cb7b4 Set optimizer options in WelsVP similarly to the other encoder projects 2014-07-09 13:13:59 +03:00
Martin Storsjö
013de2602a Use $(OutDir) instead of hardcoding the directory name
This is how it is done in the other projects.
2014-07-09 13:12:12 +03:00
huili2
b86e1f00b2 Merge pull request #1127 from ruil2/temporal_bug_fix
fix bug when temporal layer changes
2014-07-09 17:26:59 +08:00
huili2
a29645cefe Merge pull request #1125 from mstorsjo/remove-unused-options
Don't set custom build options for VCMIDLTool
2014-07-09 17:26:21 +08:00
huili2
e465cc8bc3 Merge pull request #1124 from mstorsjo/consistent-debug-options
Set DebugInformationFormat consistently in all projects
2014-07-09 17:25:58 +08:00
huili2
fb52509cee Merge pull request #1122 from mstorsjo/remove-hardcoded-defaults
Remove some manually set options, that are set to the default value
2014-07-09 17:25:26 +08:00
huili2
9ccfea24a7 Merge pull request #1120 from mstorsjo/remove-nonexistent-paths
Remove unnecessarily set AdditionalLibraryDirectories
2014-07-09 17:24:41 +08:00
huili2
71617445df Merge pull request #1123 from mstorsjo/remove-unused-pch-path
Don't set path to a precompiled header - precompiled headers are disabled
2014-07-09 17:24:17 +08:00
Martin Storsjö
73ccb74414 Only build the needed binaries in run_PrepareAllTestData.sh
Previously this did a full make, including all of gtest and the unit
test suite. This was done before every build, even for the binary
comparison tests which doesn't use the unit test.

This reduces the runtime of run_PrepareAllTestData.sh from 52 to 10
seconds in one setup.
2014-07-09 11:46:52 +03:00
ruil2
821483a4e9 fix bug when temporal layer changes 2014-07-09 16:43:58 +08:00
Martin Storsjö
6bf65da869 Avoid repeated code for getting the android toolchain prefix 2014-07-09 11:10:33 +03:00
Martin Storsjö
569033c091 Don't set custom build options for VCMIDLTool
This tool isn't even used in the build (and thus, these settings
aren't even visible in the IDE).
2014-07-09 10:48:15 +03:00
Martin Storsjö
46c4335cb5 Set DebugInformationFormat consistently in all projects
Use the "Program Database (/Zi)" in release mode and in debug
mode for x64, use "Program Database for Edit & Continue (/ZI)"
in debug mode for Win32.

This is how new visual studio projects are set by default.
2014-07-09 10:46:18 +03:00
Martin Storsjö
79f80ac7da Don't set path to a precompiled header - precompiled headers are disabled 2014-07-09 10:43:57 +03:00
Martin Storsjö
3068814e90 Remove some manually set options, that are set to the default value
These are the only places where these options are overridden.
2014-07-09 10:42:32 +03:00
ruil2
45c2fff6b8 interface update 2014-07-09 15:41:04 +08:00
Martin Storsjö
fb47e529fc Remove unnecessarily set AdditionalLibraryDirectories
Some of these even pointed to directories that don't exist (and
don't get created during the build process).
2014-07-09 10:35:54 +03:00
Martin Storsjö
53b79c0c1f Ignore files produced by the new binary comparison tool 2014-07-09 10:30:05 +03:00
sijchen
2f53a08aba Merge pull request #1109 from shihuade/Release2.0
add encoder binary comparison test model, reviewed at https://www.rbcommons.com/s/OpenH264/r/500
2014-07-09 12:59:20 +08:00
shihuade
78771344b7 add encoder binary comparison test model 2014-07-08 13:15:57 -04:00
zhiliang wang
ae12fbde1c Add x86 64bit asm code for downsample 2014-07-08 19:25:31 +08:00
340 changed files with 38844 additions and 6340 deletions

4
.gitignore vendored
View File

@@ -1,7 +1,6 @@
# Object files
*.o
*.obj
codec/obj
# Dependency files
*.d
@@ -45,3 +44,6 @@ testbin/test_vd_rc.264
testbin/test_vd_rc.yuv
testbin/test.264
testbin/test.yuv
# pkg-config file
*.pc

View File

@@ -1,15 +1,38 @@
language: cpp
compiler:
- g++
- clang
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq nasm g++-4.6-multilib gcc-multilib libc6-dev-i386
install:
- make gmp-bootstrap
- make gtest-bootstrap
before_script:
- WorkingDir=`pwd`
- cd test/encoder_binary_comparison
- ./run_PrepareAllTestData.sh 64
- cd ${WorkingDir}
env:
- TASK=UnitTest; TestParameter=""
- TASK=BinaryCompare; TestParameter=BA_MW_D.264
- TASK=BinaryCompare; TestParameter=LS_SVA_D.264
- TASK=BinaryCompare; TestParameter=CVPCMNL1_SVA_C.264
matrix:
exclude:
- compiler: clang
env: TASK=BinaryCompare; TestParameter=BA_MW_D.264
- compiler: clang
env: TASK=BinaryCompare; TestParameter=LS_SVA_D.264
- compiler: clang
env: TASK=BinaryCompare; TestParameter=CVPCMNL1_SVA_C.264
script:
- make -B ENABLE64BIT=Yes BUILDTYPE=Release all plugin test
- make -B ENABLE64BIT=Yes BUILDTYPE=Debug all plugin test
- make -B ENABLE64BIT=No BUILDTYPE=Release all plugin test
- make -B ENABLE64BIT=No BUILDTYPE=Debug all plugin test
- echo "currrent test is for ${TASK}"
- echo "test parameter is ${TestParameter}"
- ./run_Test.sh ${TASK} ${TestParameter}

View File

@@ -44,8 +44,9 @@ Rory Zhang
Volvet Zhang
Ling Zhu
James Zhu
Dong Zhang
Haibo Zhu
Huade Shi

154
Makefile
View File

@@ -1,3 +1,10 @@
SRC_PATH=$(word 1, $(dir $(MAKEFILE_LIST)))
vpath %.c $(SRC_PATH)
vpath %.cc $(SRC_PATH)
vpath %.cpp $(SRC_PATH)
vpath %.asm $(SRC_PATH)
vpath %.S $(SRC_PATH)
OS=$(shell uname | tr A-Z a-z | tr -d \\-[:digit:].)
ARCH=$(shell uname -m)
LIBPREFIX=lib
@@ -15,18 +22,20 @@ V=Yes
PREFIX=/usr/local
SHARED=-shared
OBJ=o
SHAREDLIB_DIR=$(PREFIX)/lib
PROJECT_NAME=openh264
MODULE_NAME=gmpopenh264
GMP_API_BRANCH=Firefox32
GMP_API_BRANCH=Firefox36
CCASFLAGS=$(CFLAGS)
VERSION=1.2
ifeq (,$(wildcard ./gmp-api))
ifeq (,$(wildcard $(SRC_PATH)gmp-api))
HAVE_GMP_API=No
else
HAVE_GMP_API=Yes
endif
ifeq (,$(wildcard ./gtest))
ifeq (,$(wildcard $(SRC_PATH)gtest))
HAVE_GTEST=No
else
HAVE_GTEST=Yes
@@ -46,7 +55,8 @@ CFLAGS += -fsanitize=address
LDFLAGS += -fsanitize=address
endif
include build/platform-$(OS).mk
SHAREDLIBVERSION=0
include $(SRC_PATH)build/platform-$(OS).mk
CFLAGS +=
@@ -68,56 +78,59 @@ ifneq ($(V),Yes)
endif
INCLUDES += -Icodec/api/svc -Icodec/common/inc
INCLUDES += -I$(SRC_PATH)codec/api/svc -I$(SRC_PATH)codec/common/inc
DECODER_INCLUDES += \
-Icodec/decoder/core/inc \
-Icodec/decoder/plus/inc
-I$(SRC_PATH)codec/decoder/core/inc \
-I$(SRC_PATH)codec/decoder/plus/inc
ENCODER_INCLUDES += \
-Icodec/encoder/core/inc \
-Icodec/encoder/plus/inc \
-Icodec/processing/interface
-I$(SRC_PATH)codec/encoder/core/inc \
-I$(SRC_PATH)codec/encoder/plus/inc \
-I$(SRC_PATH)codec/processing/interface
PROCESSING_INCLUDES += \
-Icodec/processing/interface \
-Icodec/processing/src/common \
-Icodec/processing/src/scrolldetection
-I$(SRC_PATH)codec/processing/interface \
-I$(SRC_PATH)codec/processing/src/common \
-I$(SRC_PATH)codec/processing/src/adaptivequantization \
-I$(SRC_PATH)codec/processing/src/downsample \
-I$(SRC_PATH)codec/processing/src/scrolldetection \
-I$(SRC_PATH)codec/processing/src/vaacalc
GTEST_INCLUDES += \
-Igtest \
-Igtest/include
-I$(SRC_PATH)gtest \
-I$(SRC_PATH)gtest/include
CODEC_UNITTEST_INCLUDES += \
-Igtest/include \
-Icodec/common/inc \
-I$(SRC_PATH)gtest/include \
-I$(SRC_PATH)codec/common/inc \
CONSOLE_COMMON_INCLUDES += \
-Icodec/console/common/inc
-I$(SRC_PATH)codec/console/common/inc
H264DEC_INCLUDES += $(DECODER_INCLUDES) $(CONSOLE_COMMON_INCLUDES) -Icodec/console/dec/inc
H264DEC_INCLUDES += $(DECODER_INCLUDES) $(CONSOLE_COMMON_INCLUDES) -I$(SRC_PATH)codec/console/dec/inc
H264DEC_LDFLAGS = $(LINK_LOCAL_DIR) $(call LINK_LIB,decoder) $(call LINK_LIB,common) $(call LINK_LIB,console_common)
H264DEC_DEPS = $(LIBPREFIX)decoder.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX) $(LIBPREFIX)console_common.$(LIBSUFFIX)
H264ENC_INCLUDES += $(ENCODER_INCLUDES) $(CONSOLE_COMMON_INCLUDES) -Icodec/console/enc/inc
H264ENC_INCLUDES += $(ENCODER_INCLUDES) $(CONSOLE_COMMON_INCLUDES) -I$(SRC_PATH)codec/console/enc/inc
H264ENC_LDFLAGS = $(LINK_LOCAL_DIR) $(call LINK_LIB,encoder) $(call LINK_LIB,processing) $(call LINK_LIB,common) $(call LINK_LIB,console_common)
H264ENC_DEPS = $(LIBPREFIX)encoder.$(LIBSUFFIX) $(LIBPREFIX)processing.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX) $(LIBPREFIX)console_common.$(LIBSUFFIX)
CODEC_UNITTEST_LDFLAGS = $(LINK_LOCAL_DIR) $(call LINK_LIB,gtest) $(call LINK_LIB,decoder) $(call LINK_LIB,encoder) $(call LINK_LIB,processing) $(call LINK_LIB,common) $(CODEC_UNITTEST_LDFLAGS_SUFFIX)
CODEC_UNITTEST_DEPS = $(LIBPREFIX)gtest.$(LIBSUFFIX) $(LIBPREFIX)decoder.$(LIBSUFFIX) $(LIBPREFIX)encoder.$(LIBSUFFIX) $(LIBPREFIX)processing.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX)
DECODER_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(DECODER_INCLUDES) -Itest -Itest/decoder
ENCODER_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(ENCODER_INCLUDES) -Itest -Itest/encoder
PROCESSING_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(PROCESSING_INCLUDES) -Itest -Itest/processing
API_TEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) -Itest -Itest/api
COMMON_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(DECODER_INCLUDES) -Itest -Itest/common
MODULE_INCLUDES += -Igmp-api
DECODER_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(DECODER_INCLUDES) -I$(SRC_PATH)test -I$(SRC_PATH)test/decoder
ENCODER_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(ENCODER_INCLUDES) -I$(SRC_PATH)test -I$(SRC_PATH)test/encoder
PROCESSING_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(PROCESSING_INCLUDES) -I$(SRC_PATH)test -I$(SRC_PATH)test/processing
API_TEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) -I$(SRC_PATH)test -I$(SRC_PATH)test/api
COMMON_UNITTEST_INCLUDES += $(CODEC_UNITTEST_INCLUDES) $(DECODER_INCLUDES) -I$(SRC_PATH)test -I$(SRC_PATH)test/common
MODULE_INCLUDES += -I$(SRC_PATH)gmp-api
.PHONY: test gtest-bootstrap clean
.PHONY: test gtest-bootstrap clean $(PROJECT_NAME).pc
all: libraries binaries
generate-version:
sh ./codec/common/generate_version.sh
$(QUIET)cd $(SRC_PATH) && sh ./codec/common/generate_version.sh
codec/decoder/plus/src/welsDecoderExt.$(OBJ): | generate-version
codec/encoder/plus/src/welsEncoderExt.$(OBJ): | generate-version
@@ -126,7 +139,7 @@ clean:
ifeq (android,$(OS))
clean: clean_Android
endif
$(QUIET)rm -f $(OBJS) $(OBJS:.$(OBJ)=.d) $(LIBRARIES) $(BINARIES)
$(QUIET)rm -f $(OBJS) $(OBJS:.$(OBJ)=.d) $(OBJS:.$(OBJ)=.obj) $(LIBRARIES) $(BINARIES) *.lib *.a *.dylib *.dll *.so
gmp-bootstrap:
if [ ! -d gmp-api ] ; then git clone https://github.com/mozilla/gmp-api gmp-api ; fi
@@ -150,20 +163,20 @@ test:
@echo "You do not have gtest. Run make gtest-bootstrap to get gtest"
endif
include codec/common/targets.mk
include codec/decoder/targets.mk
include codec/encoder/targets.mk
include codec/processing/targets.mk
include $(SRC_PATH)codec/common/targets.mk
include $(SRC_PATH)codec/decoder/targets.mk
include $(SRC_PATH)codec/encoder/targets.mk
include $(SRC_PATH)codec/processing/targets.mk
ifeq ($(HAVE_GMP_API),Yes)
include module/targets.mk
include $(SRC_PATH)module/targets.mk
endif
ifneq (android, $(OS))
ifneq (ios, $(OS))
include codec/console/dec/targets.mk
include codec/console/enc/targets.mk
include codec/console/common/targets.mk
include $(SRC_PATH)codec/console/dec/targets.mk
include $(SRC_PATH)codec/console/enc/targets.mk
include $(SRC_PATH)codec/console/common/targets.mk
endif
endif
@@ -173,28 +186,41 @@ else
libraries: $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX)
endif
LIBRARIES += $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX)
LIBRARIES += $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER)
$(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX): $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(QUIET)rm -f $@
$(QUIET_AR)$(AR) $(AR_OPTS) $+
$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX): $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER): $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(QUIET)rm -f $@
$(QUIET_CXX)$(CXX) $(SHARED) $(LDFLAGS) $(CXX_LINK_O) $+ $(SHLDFLAGS)
$(QUIET_CXX)$(CXX) $(SHARED) $(CXX_LINK_O) $+ $(LDFLAGS) $(SHLDFLAGS)
ifneq ($(SHAREDLIBSUFFIXVER),$(SHAREDLIBSUFFIX))
$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX): $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER)
$(QUIET)ln -sfn $+ $@
endif
ifeq ($(HAVE_GMP_API),Yes)
plugin: $(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIX)
LIBRARIES += $(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIX)
LIBRARIES += $(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIXVER)
else
plugin:
@echo "./gmp-api : No such file or directory."
@echo "You do not have gmp-api. Run make gmp-bootstrap to get the gmp-api headers."
endif
$(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIX): $(MODULE_OBJS) $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIXVER): $(MODULE_OBJS) $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(QUIET)rm -f $@
$(QUIET_CXX)$(CXX) $(SHARED) $(LDFLAGS) $(CXX_LINK_O) $+ $(SHLDFLAGS) $(MODULE_LDFLAGS)
$(QUIET_CXX)$(CXX) $(SHARED) $(CXX_LINK_O) $+ $(LDFLAGS) $(SHLDFLAGS) $(MODULE_LDFLAGS)
ifneq ($(SHAREDLIBSUFFIXVER),$(SHAREDLIBSUFFIX))
$(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIX): $(LIBPREFIX)$(MODULE_NAME).$(SHAREDLIBSUFFIXVER)
$(QUIET)ln -sfn $+ $@
endif
$(PROJECT_NAME).pc: $(PROJECT_NAME).pc.in
@sed -e 's;@prefix@;$(PREFIX);' -e 's;@VERSION@;$(VERSION);' < $(PROJECT_NAME).pc.in > $(PROJECT_NAME).pc
install-headers:
mkdir -p $(PREFIX)/include/wels
@@ -204,9 +230,14 @@ install-static: $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) install-headers
mkdir -p $(PREFIX)/lib
install -m 644 $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) $(PREFIX)/lib
install-shared: $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX) install-headers
mkdir -p $(PREFIX)/lib
install -m 755 $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX) $(PREFIX)/lib
install-shared: $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX) install-headers $(PROJECT_NAME).pc
mkdir -p $(SHAREDLIB_DIR)
install -m 755 $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER) $(SHAREDLIB_DIR)
if [ "$(SHAREDLIBSUFFIXVER)" != "$(SHAREDLIBSUFFIX)" ]; then \
cp -a $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX) $(SHAREDLIB_DIR); \
fi
mkdir -p $(PREFIX)/lib/pkgconfig
install -m 444 $(PROJECT_NAME).pc $(PREFIX)/lib/pkgconfig
ifneq ($(EXTRA_LIBRARY),)
install -m 644 $(EXTRA_LIBRARY) $(PREFIX)/lib
endif
@@ -215,12 +246,12 @@ install: install-static install-shared
@:
ifeq ($(HAVE_GTEST),Yes)
include build/gtest-targets.mk
include test/api/targets.mk
include test/decoder/targets.mk
include test/encoder/targets.mk
include test/processing/targets.mk
include test/common/targets.mk
include $(SRC_PATH)build/gtest-targets.mk
include $(SRC_PATH)test/api/targets.mk
include $(SRC_PATH)test/decoder/targets.mk
include $(SRC_PATH)test/encoder/targets.mk
include $(SRC_PATH)test/processing/targets.mk
include $(SRC_PATH)test/common/targets.mk
LIBRARIES += $(LIBPREFIX)ut.$(LIBSUFFIX)
$(LIBPREFIX)ut.$(LIBSUFFIX): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(COMMON_UNITTEST_OBJS) $(API_TEST_OBJS)
@@ -231,7 +262,7 @@ $(LIBPREFIX)ut.$(LIBSUFFIX): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $
LIBRARIES +=$(LIBPREFIX)ut.$(SHAREDLIBSUFFIX)
$(LIBPREFIX)ut.$(SHAREDLIBSUFFIX): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(API_TEST_OBJS) $(COMMON_UNITTEST_OBJS) $(CODEC_UNITTEST_DEPS)
$(QUIET)rm -f $@
$(QUIET_CXX)$(CXX) $(SHARED) $(LDFLAGS) $(CXX_LINK_O) $+ $(CODEC_UNITTEST_LDFLAGS)
$(QUIET_CXX)$(CXX) $(SHARED) $(CXX_LINK_O) $+ $(LDFLAGS) $(CODEC_UNITTEST_LDFLAGS)
binaries: codec_unittest$(EXEEXT)
BINARIES += codec_unittest$(EXEEXT)
@@ -241,6 +272,7 @@ codec_unittest$(EXEEXT): $(LIBPREFIX)ut.$(LIBSUFFIX) $(LIBPREFIX)gtest.$(LIBSUFF
else
ifeq (android,$(OS))
ifeq (./,$(SRC_PATH))
codec_unittest$(EXEEXT): $(LIBPREFIX)ut.$(SHAREDLIBSUFFIX)
cd ./test/build/android && $(NDKROOT)/ndk-build -B APP_ABI=$(APP_ABI) && android update project -t $(TARGET) -p . && ant debug
@@ -249,10 +281,17 @@ clean_Android_ut:
-cd ./test/build/android && $(NDKROOT)/ndk-build APP_ABI=$(APP_ABI) clean && ant clean
else
codec_unittest$(EXEEXT): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(API_TEST_OBJS) $(COMMON_UNITTEST_OBJS) $(CODEC_UNITTEST_DEPS)
codec_unittest$(EXEEXT):
@:
endif
else
codec_unittest$(EXEEXT): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(API_TEST_OBJS) $(COMMON_UNITTEST_OBJS) $(CODEC_UNITTEST_DEPS) | res
$(QUIET)rm -f $@
$(QUIET_CXX)$(CXX) $(CXX_LINK_O) $+ $(CODEC_UNITTEST_LDFLAGS) $(LDFLAGS)
res:
$(QUIET)if [ ! -e res ]; then ln -s $(SRC_PATH)res .; fi
endif
endif
@@ -262,3 +301,10 @@ binaries:
endif
-include $(OBJS:.$(OBJ)=.d)
OBJDIRS = $(sort $(dir $(OBJS)))
$(OBJDIRS):
$(QUIET)mkdir -p $@
$(OBJS): | $(OBJDIRS)

Binary file not shown.

View File

@@ -64,14 +64,13 @@ The codec and demo can be built by
'make OS=android NDKROOT=**ANDROID_NDK** TARGET= **ANDROID_TARGET**'
Valid **ANDROID_TARGET** can be found in **ANDROID_SDK**/platforms, such as android-12.
You can also set ARCH, NDKLEVEL, GCCVERSION according to your device and NDK version.
You can also set ARCH, NDKLEVEL according to your device and NDK version.
ARCH specifies the architecture of android device. Currently only arm and x86 are supported, the default is arm.
NDKLEVEL specifies android api level, the api level can be 12-19, the default is 12.
GCCVERSION specifies which gcc in NDK is used, the default is 4.8.
By default these commands build for the armeabi-v7a ABI. To build for the other android
ABIs, add "ARCH=mips" or "ARCH=x86". To build for the older armeabi ABI (which has
armv5te as baseline), add "APP_ABI=armeabi" (ARCH=arm is implicit).
ABIs, add "ARCH=arm64", "ARCH=x86", "ARCH=x86_64", "ARCH=mips" or "ARCH=mips64".
To build for the older armeabi ABI (which has armv5te as baseline), add "APP_ABI=armeabi" (ARCH=arm is implicit).
For iOS Builds
--------------

View File

@@ -1,5 +1,35 @@
Releases
-----------
v1.3.0
------
- Removed manual API document, now using wiki: https://github.com/cisco/openh264/wiki (0af48e5 for v1.3.0)
- Added API version in API header files
- Added pkg-config file
- Added decoder support of parsing only (bParseOnly) for only parsing bit stream but not decoding
- Added timestamp and max nal size in gmp-openh264.cpp when calling encoding
- Added timestamp info in decoder input and return structure
- Added support of level 9 in decoder
- Added total length of the encoded frame in encoder return structure
- Added SetOption(ENCODER_OPTION_SVC_ENCODE_PARAM_BASE,&base) for encoder
- Set constraint set 0 and 1 flags for non-scalable
- Improved error concealment algorithms and provide more modes of error-concealment
- Improved rate control algorithms and reference selection algorithms for screen content encoding
- Added encoder and decoder statistics interface
- Improved input parameter checking and logging
- Bug fixes, warning reductions, and test improvements
-----------
v1.2.0
------
- Add and modify encoder APIs related to rate control and screen content encoding
- Remove PauseFrame in encoder APIs
- Improve rate control and compression ratio for screen content encoding
- Improve error concealment algorithm
- Improve validation of input parameters
- Add ARM64 assembly
- bug fixes
-----------
v1.1.0
------
@@ -15,11 +45,23 @@ Binaries
These binary releases are distributed under this license:
http://www.openh264.org/BINARY_LICENSE.txt
v1.3.0
------
// to be added
v1.2.0
------
http://ciscobinary.openh264.org/libopenh264-1.2.0-android19.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.2.0-linux32.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.2.0-linux64.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.2.0-osx32.dylib.bz2
http://ciscobinary.openh264.org/libopenh264-1.2.0-osx64.dylib.bz2
http://ciscobinary.openh264.org/openh264-1.2.0-win32msvc.dll.bz2
http://ciscobinary.openh264.org/openh264-1.2.0-win64msvc.dll.bz2
v1.1.0
------
http://ciscobinary.openh264.org/libopenh264-1.1.0-android19.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.1.0-ios32.a.bz2
http://ciscobinary.openh264.org/libopenh264-1.1.0-ios64.a.bz2
http://ciscobinary.openh264.org/libopenh264-1.1.0-linux32.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.1.0-linux64.so.bz2
http://ciscobinary.openh264.org/libopenh264-1.1.0-osx32.dylib.bz2

13
autotest/performanceTest/.gitignore vendored Normal file
View File

@@ -0,0 +1,13 @@
#performance test resource folder
./EncoderPerfTestRes
./DecoderPerfTestRes
./DecoderPerfTestRes/*.*
./EncoderPerfTestRes/*.*
#performance test result folder
./TestResultCSV
#
.DS_Store
#.
./android/report
./ios/report

View File

@@ -0,0 +1,180 @@
#!/bin/bash
AUTO_TEST_ANDROID_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../../"
AUTO_TEST_RES_PATH="${AUTO_TEST_ANDROID_PATH}/report"
mkdir -p ${AUTO_TEST_RES_PATH}
#Prepare android build enviroment
echo please set the enviroment variable as:
echo export ANDROID_HOME="path of android sdk"
echo export ANDROID_NDK_HOME="path of android ndk"
ANDROID_SDK_PATH=${ANDROID_HOME}
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
ANDROID_MAKE_PARAMS="OS=android NDKROOT=${ANDROID_NDK_PATH} TARGET=android-19"
if [ "#${ANDROID_SDK_PATH}" = "#" ]
then
echo Please set ANDROID_HOME with the path of Android SDK
exit 1
fi
if [ "#${ANDROID_NDK_PATH}" = "#" ]
then
echo Please set ANDROID_NDK_HOME with the path of Android NDK
exit 1
fi
#make build
cd ${AUTO_TEST_SRC_PATH}
find ./ -name *.o -exec rm -f {} \;
find ./ -name *.d -exec rm -f {} \;
make $ANDROID_MAKE_PARAMS
if [ $? -ne 0 ]
then
echo Build error,check with the trace of make
exit 1
fi
ENCDEC=$1
#find apk
if [ ${ENCDEC} = "enc" ]
then
echo Start to find enc apk
apk_name=`find ./ -name WelsEncTest-debug.apk`
if [ "#${apk_name}" = "#" ]
then
echo Fail to find encoder APK.
exit 1
fi
else
echo Start to find dec apk
apk_name=`find ./ -name WelsDecTest-debug.apk`
if [ "#${apk_name}" = "#" ]
then
echo Fail to find decoder APK.
exit 1
fi
fi
#prepare devices
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
#get devices
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
if [ "#$devices" = "#" ];then
echo "Have not any android devices."
exit 1
fi
#run apk
run_apk() {
local apk=$1;
local rand=` date +%s`
if [[ "${apk}" =~ "WelsDecTest-debug.apk" ]]
then
apk_id="com.wels.dec"
apk_main="com.wels.dec/.WelsDecTest"
test_path="/sdcard/welsdec"
log_grep_params="welsdec"
test_res=${AUTO_TEST_ANDROID_PATH}/../DecoderPerfTestRes
report_file=${AUTO_TEST_RES_PATH}/decPerf
fi
if [[ "${apk}" =~ "WelsEncTest-debug.apk" ]]
then
apk_id="com.wels.enc"
apk_main="com.wels.enc/.WelsEncTest"
test_path="/sdcard/welsenc"
log_grep_params="welsenc"
test_res=${AUTO_TEST_ANDROID_PATH}/../EncoderPerfTestRes
report_file=${AUTO_TEST_RES_PATH}/encPerf
fi
space="limit"
for dev in $devices; do
dev_info_file=${AUTO_TEST_RES_PATH}/${dev}.log
$ADB -s $dev uninstall ${apk_id}
$ADB -s $dev install -r ${apk}
#TODO: output more info about android device such as name,cpu,memory,and also power comsumption.
#echo `$ADB -s $dev shell cat /system/build.prop |grep ro.product.model | awk -F"=" '{print $2}'`>${dev_info_file}
#push resources
#For limited devices space
if [ ${space} = "limit" ]
then
test_res_bak=${test_res}_bak
mv ${test_res} ${test_res_bak}
mkdir -p ${test_res}
test_case=`ls ${test_res_bak}`
for case in ${test_case}
do
echo ${case}
cp -r ${test_res_bak}/${case} ${test_res}/.
$ADB -s $dev push ${test_res} ${test_path}
#before start logcat,kill logcat
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
$ADB -s $dev logcat -c
$ADB -s $dev logcat |grep ${log_grep_params} >>${report_file}_${dev}_${rand}.log &
$ADB -s $dev shell am start -n ${apk_main}
# check whetehr the app is finished every 2 sec
for (( ; ; )); do
$ADB -s $dev shell ps | grep ${apk_id}
if [ $? -ne 0 ]; then
sleep 2
$ADB -s $dev shell ps | grep ${apk_id}
[ $? -ne 0 ] && break
fi
sleep 2
done
# kill logcat
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
#delete the res
$ADB -s $dev shell rm -rf ${test_path}
rm -rf ${test_res}/${case}
done
rm -rf ${test_res}
mv ${test_res_bak} ${test_res}
else
$ADB -s $dev push ${test_res} ${test_path}
#before start logcat,kill logcat
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
$ADB -s $dev logcat -c
$ADB -s $dev logcat |grep ${log_grep_params} >${report_file}_${dev}_${rand}.log &
$ADB -s $dev shell am start -n ${apk_main}
# check whetehr the app is finished every 2 sec
for (( ; ; )); do
$ADB -s $dev shell ps | grep ${apk_id}
if [ $? -ne 0 ]; then
sleep 2
$ADB -s $dev shell ps | grep ${apk_idi}
[ $? -ne 0 ] && break
fi
sleep 2
done
# kill logcat
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
#delete the res
$ADB -s $dev shell rm -rf ${test_path}
fi
done
}
for apk in ${apk_name};do
run_apk $apk;
if [ $? -ne 0 ]
then
echo There is something wrong happened when run ${apk_name}
exit 1
else
echo Finished $ENCDEC performance test on android
echo The test result is at ./android/report/xxx.log
echo xxxxxxxxxxxxxxxAndroid $ENCDEC Endxxxxxxxxxxxxxxxx
fi
done

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,193 @@
#!/bin/bash
##############################################################
#Build ios test ref app
#set the default configuration
CODEC_TEST_IOS_ARCH="armv7 armv7s arm64"
CODEC_TEST_IOS_PLATFORM="iphoneos"
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
buildXcodeProject()
{
xcodebuild ARCHS="${CODEC_TEST_IOS_ARCH}" VALID_ARCHS="${CODEC_TEST_IOS_ARCH}" ONLY_ACTIVE_ARCH=YES -project $1 -target $2 -configuration $3 -sdk ${CODEC_TEST_IOS_PLATFORM} clean build
if [ $? -eq 0 ]; then
echo "build $1 $3 successfully"
else
echo "build $1 $3 fail"
exit 1
fi
}
iosPerformanceTest()
{
if [ $# -gt 2 ]; then
echo "Please use command $0 [enc/dec] [release/debug]"
exit 1
fi
for PARAM in $*; do
if [ "enc" = "${PARAM}" ]; then
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/codec/build/iOS/enc/encDemo/encDemo.xcodeproj"
CODEC_TEST_IOS_PROJECT_NAME="encDemo"
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/codec/build/iOS/enc/encDemo/build"
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
CODEC_TEST_IOS_APP_ID="cisco.encDemo"
CODEC_TEST_RES=${AUTO_TEST_IOS_PATH}/../EncoderPerfTestRes
CODEC_TEST_LOG="encPerf"
elif [ "dec" = "${PARAM}" ]; then
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/codec/build/iOS/dec/demo/demo.xcodeproj/"
CODEC_TEST_IOS_PROJECT_NAME="demo"
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/codec/build/iOS/dec/demo/build"
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
CODEC_TEST_IOS_APP_ID="hf.cisco.demo"
CODEC_TEST_RES=${AUTO_TEST_IOS_PATH}/../DecoderPerfTestRes
CODEC_TEST_LOG="decPerf"
elif [ "release" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
elif [ "debug" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Debug"
CODEC_TEST_IOS_REPORT_SUBFOLDER="debug"
else
echo parameters are illegal!!!, please have a check.
exit 1
fi
done
echo "Codec test will run on ${CODEC_TEST_IOS_PLATFORM} with ${CODEC_TEST_IOS_DEBUG_RELEASE}"
buildXcodeProject ${CODEC_TEST_XCODE_PROJECT_NAME} ${CODEC_TEST_IOS_PROJECT_NAME} ${CODEC_TEST_IOS_DEBUG_RELEASE} ${CODEC_TEST_IOS_PLATFORM}
##############run on ios devices#########################
# for real device
if [ ! -d ${CODEC_TEST_IOS_APP} ] ; then
echo "${CODEC_TEST_IOS_APP} is not found"
exit 1
else
echo "Find app ${CODEC_TEST_IOS_APP}"
fi
#ensure instruments not runing
echo "Try to kill the runing instruments"
pids_str=`ps x -o pid,command | grep -v grep | grep "instruments" | awk '{printf "%s,", $1}'`
instruments_pids="${pids_str//,/ }"
for pid in ${instruments_pids}; do
echo "Found instruments ${pid}. Killing..."
kill -9 ${pid} && wait ${pid} &> /dev/null
done
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
if [ "${DEVICES}#" == "#" ]
then
echo "Can not find any connected device! please check device is connected to MAC!"
exit 1
else
rand=`date +%s`
for DEVICE_ID in ${DEVICES}
do
echo "Try to run on device:${DEVICE_ID}"
#Encoder YUV file too large
if [ ${ENCDEC} = "enc" ]
then
#For limited devices space
BAKRES=${CODEC_TEST_RES}_bak
mv ${CODEC_TEST_RES} ${BAKRES}
mkdir -p ${CODEC_TEST_RES}
CODEC_CASE=`ls ${BAKRES}`
echo ${CODEC_CASE}
for CASE in ${CODEC_CASE}
do
echo ${CASE}
cp -r ${BAKRES}/${CASE} ${CODEC_TEST_RES}/.
#uninstall the application from device to remove the last result
./fruitstrap uninstall --bundle ${CODEC_TEST_IOS_APP_ID} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo uninstall application: ${CODEC_TEST_IOS_APP} from device: ${DEVICE_ID} is failed!
fi
#install the application
./fruitstrap install --bundle ${CODEC_TEST_IOS_APP} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo install application: ${CODEC_TEST_IOS_APP} to device: ${DEVICE_ID} is failed!
exit 1
fi
./iFileTransfer -o copy -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from ${CODEC_TEST_RES}
instruments -w ${DEVICE_ID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ${CODEC_TEST_IOS_APP} -e UIASCRIPT ./uiascript.js -e UIARRESULTPATH /tmp/
#copy to report folder
./iFileTransfer -o download -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from /Documents/${CODEC_TEST_LOG}.log -to ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CASE}.log
if [ $? -ne 0 ]; then
echo "download file: ${CODEC_TEST_LOG}.log from ${CODEC_TEST_IOS_APP_ID} is failed!"
exit 1
fi
cat ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CASE}.log>>${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}.log
rm -f ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CASE}.log
rm -rf ${CODEC_TEST_RES}/${CASE}
done
rm -rf ${CODEC_TEST_RES}
mv ${BAKRES} ${CODEC_TEST_RES}
#Enough spaces
else
#uninstall the application from device to remove the last result
./fruitstrap uninstall --bundle ${CODEC_TEST_IOS_APP_ID} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo uninstall application: ${CODEC_TEST_IOS_APP} from device: ${DEVICE_ID} is failed!
fi
#install the application
./fruitstrap install --bundle ${CODEC_TEST_IOS_APP} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo install application: ${CODEC_TEST_IOS_APP} to device: ${DEVICE_ID} is failed!
exit 1
fi
./iFileTransfer -o copy -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from ${CODEC_TEST_RES}
instruments -w ${DEVICE_ID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ${CODEC_TEST_IOS_APP} -e UIASCRIPT ./uiascript.js -e UIARRESULTPATH /tmp/
#copy to report folder
./iFileTransfer -o download -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from /Documents/${CODEC_TEST_LOG}.log -to ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CASE}.log
if [ $? -ne 0 ]; then
echo "download file: ${CODEC_TEST_LOG}.log from ${CODEC_TEST_IOS_APP_ID} is failed!"
exit 1
fi
fi
done
fi
}
AUTO_TEST_IOS_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../.."
CODEC_TEST_IOS_REPORT_PATH="${AUTO_TEST_IOS_PATH}/report"
if [ ! -d ${CODEC_TEST_IOS_REPORT_PATH} ]
then
mkdir -p ${CODEC_TEST_IOS_REPORT_PATH}
fi
ENCDEC=$1
#start to get encoder/decoder performance data,default run the xcode with release
iosPerformanceTest $ENCDEC release
if [ $? -ne 0 ]; then
echo "Running $ENCDEC demo to get encoder performance is failed!"
exit 1
else
echo Finished $ENCDEC performance test on ios devices
echo the test result is generated at ./ios/report/xx.loGbash parsePerfData.sh
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxIOS $ENCDEC Endxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fi
#TODO:according to the trace of instruments to do some analysis
#find ./ -name *.trace -exec rm -rf {} \;

View File

@@ -0,0 +1,19 @@
UIATarget.onAlert = function onAlert(alert){
UIALogger.logMessage("In Alert!");
title = alert.name();
if (title && title.indexOf("Microphone") !== -1) {
UIALogger.logMessage("Alert with title '" + title + "' encountered!");
var buttons = alert.buttons();
var buttonCount = buttons.length;
if (buttonCount > 0) {
var acceptButton = buttons[buttonCount - 1];
acceptButton.tap(); // last button is accept
}
return true; //forbid the default cancel processing
}
return false; //using the default cancel processing
}
var target = UIATarget.localTarget();
target.delay(6000);

View File

@@ -0,0 +1,107 @@
#!/bin/bash
#usage runGetPerformanceInfo ${PerformanceLogFile}
runGetPerformanceInfo_openh264()
{
if [ ! $# -eq 2 ]
then
echo "not enough parameters!"
echo "usage: ${0} [android/ios] ${PerformanceLogFile}"
return 1
fi
local PerformanceLogFile=$2
local FileName=""
local Width=""
local Height=""
local Frames=""
local FPS=""
local EncodeTime=""
if [ $1 = "android" ]
then seperatorNum=3
else
seperatorNum=2
fi
while read line
do
if [[ $line =~ "enc yuv file" ]]
then
FileName=`echo $line | awk 'BEGIN {FS="enc yuv file"} {print $2}'`
FileName=`echo $FileName | awk 'BEGIN {FS=":"} {print $2}'`
fi
if [[ $line =~ "Width" ]]
then
Width=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
fi
if [[ $line =~ "Height" ]]
then
Height=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
fi
if [[ $line =~ "Frames" ]]
then
Frames=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
fi
if [[ $line =~ "FPS" ]]
then
FPS=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
FPS=`echo $FPS | awk 'BEGIN {FS="fps"} {print $1}'`
echo "${FileName},"${Width}x${Height}",${Frames},${FPS}"
fi
if [[ $line =~ "encode time" ]]
then
EncodeTime=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
fi
if [[ $line =~ "height" ]]
then
Height=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
fi
if [[ $line =~ "H264 source file name" ]]
then
FileName=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
if [ $1 = "ios" ]
then
FileName=`echo $FileName | awk -F"DecoderPerfTestRes" '{print $2}'`
FileName=`echo $FileName | awk -F"/" '{print $2}'`
else
FileName=`echo $FileName | awk -F"/" '{print $4}'`
fi
fi
done <${PerformanceLogFile}
}
AUTO_TEST_RESULT_PATH="./TestResultCSV/"
parseLogToCSV()
{
if [ $# -ne 1 ]
then echo "Please input $0 [android/ios]"
fi
if [ $* = "android" ]
then
Result_log_path="./android/report/"
suffix=android
dos2unix ${Result_log_path}*.*
else
Result_log_path="./ios/report/"
suffix=ios
fi
Result_log=`ls ${Result_log_path}`
for log in ${Result_log}
do
PerformFile=`echo $log |awk -F"." '{print $1}'`
PerformFile=${PerformFile}_${suffix}.csv
#inital perfermance file
echo "$log,,,">>${AUTO_TEST_RESULT_PATH}${PerformFile}
echo "YUV,Resolution,Encodedframes,FPS">>${AUTO_TEST_RESULT_PATH}${PerformFile}
runGetPerformanceInfo_openh264 ${suffix} ${Result_log_path}${log}>>${AUTO_TEST_RESULT_PATH}${PerformFile}
done
}
parseLogToCSV android
parseLogToCSV ios

View File

@@ -0,0 +1,122 @@
#!bin/bash
IOS=1
ANDROID=1
ENC=1
DEC=1
AUTO_TEST_PATH=`pwd`
#Judge to run the test on which kind of mobile
if [ $# -eq 0 ];then
echo Default testing will run on android and ios devices meanwhile
else
for params in $*; do
if [ $params = "ios" ];then
echo Running the test just on ios devices
ANDROID=0
elif [ $params = "android" ];then
echo Running the test just on android devices
IOS=0
elif [ $params = "enc" ];then
echo Running the encoder performance test
DEC=0
elif [ $params = "dec" ];then
echo Running the decoder performance test
ENC=0
else
echo parameters are illegal!!!, ${0} [ios/android] [enc/dec]
exit 1
fi
done
fi
#Prepare encoder resources
if [ ${ENC} = "1" ]
then
if [ ! -d ./EncoderPerTestRes ]
then
mkdir -p ./EncoderPerfTestRes
fi
if [ "#`ls ./EncoderPerfTestRes`" = "#" ]
then
echo put yuv and cfg file into ./EncoderPerfTest folder as
echo case_720p
echo case_720p/welsenc.cfg
echo case_720p/layer2.cfg
echo case_720p/yuv
echo case_720p/yuv/xxx1.yuv
echo case_720p/yuv/xxx2.yuv
echo case_360p
echo case_360p/welsenc.cfg
echo ......
else
#Run the encoder performance test
if [ ${IOS} = "1" ]
then
echo xxxxxxxxxxxxxxxxIOS ENC Startxxxxxxxxxxxxxxxxxx
echo Run the Encoder performance test on ios devices
cd ./ios
bash run_AutoTest_ios.sh enc
cd ${AUTO_TEST_PATH}
fi
if [ ${ANDROID} = "1" ]
then
echo xxxxxxxxxxxxxxAndroid ENC Startxxxxxxxxxxxxxxxxxxxx
echo Run the Encoder performance test on android devices
cd ./android
bash run_AutoTest_android.sh enc
cd ${AUTO_TEST_PATH}
fi
fi
fi
#Prepare decoder resources
if [ ${DEC} = "1" ]
then
if [ ! -d ./DecoderPerfTestRes ]
then
mkdir -p ./DecoderPerfTestRes
fi
if [ "#`ls ./DecoderPerfTestRes`" = "#" ]
then
echo put decoded bitstreams into such folder as
echo xxx1.264
echo xxx2.264
echo ........
else
#Run the decoder performance test
if [ ${IOS} = "1" ]
then
echo xxxxxxxxxxxxxxxxIOS DEC Startxxxxxxxxxxxxxxxxxx
echo Run the Decoder performance test on ios devices
cd ./ios
bash run_AutoTest_ios.sh dec
cd ${AUTO_TEST_PATH}
fi
if [ ${ANDROID} = "1" ]
then
echo xxxxxxxxxxxxxxAndroid DEC Startxxxxxxxxxxxxxxxxxxxx
echo Run the Decoder performance test on android devices
cd ./android
bash run_AutoTest_android.sh dec
cd ${AUTO_TEST_PATH}
fi
fi
fi
#TODO:NOW just generate csv file to display performance data
cd ${AUTO_TEST_PATH}
if [[ "#`ls ./ios/report`" == "#" && "#`ls ./android/report`" == "#" ]]
then
echo There is nothing result log generated at ios or android devices
else
echo Start to generate test result csv file
#Test result
mkdir -p ./TestResultCSV
bash parsePerfData.sh
echo The csv file locate ./TestResultCSV/xxx.csv
fi

4
autotest/unitTest/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
.DS_Store
./ios/report/
./android/report/

View File

@@ -0,0 +1,112 @@
#!/bin/bash
AUTO_TEST_ANDROID_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../../"
AUTO_TEST_RES_PATH="${AUTO_TEST_ANDROID_PATH}/report"
if [ ! -d ${AUTO_TEST_RES_PATH} ]
then
mkdir -p ${AUTO_TEST_RES_PATH}
else
echo "Will delete those outdate xml in the report"
rm -f ${AUTO_TEST_RES_PATH}/*.xml
fi
#Prepare android build enviroment
echo please set the enviroment variable as:
echo export ANDROID_HOME="path of android sdk"
echo export ANDROID_NDK_HOME="path of android ndk"
ANDROID_SDK_PATH=${ANDROID_HOME}
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
ANDROID_MAKE_PARAMS="OS=android NDKROOT=${ANDROID_NDK_PATH} TARGET=android-19"
if [ "#${ANDROID_SDK_PATH}" = "#" ]
then
echo Please set ANDROID_HOME with the path of Android SDK
exit 1
fi
if [ "#${ANDROID_NDK_PATH}" = "#" ]
then
echo Please set ANDROID_NDK_HOME with the path of Android NDK
exit 1
fi
#make build
cd ${AUTO_TEST_SRC_PATH}
find ./ -name *.o -exec rm -f {} \;
find ./ -name *.d -exec rm -f {} \;
make clean
make $ANDROID_MAKE_PARAMS test
if [ $? -ne 0 ]
then
echo Build error,check with the trace of make
exit 1
fi
#find apk
echo Start to find unittest apk
apk_name=`find ./ -name MainActivity-debug.apk`
if [ "#${apk_name}" = "#" ]
then
echo Fail to find encoder APK.
exit 1
fi
#prepare devices
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
#get devices
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
if [ "#$devices" = "#" ];then
echo "Have not any android devices."
exit 1
fi
#run apk
run_apk() {
local apk=$1;
local rand=` date +%s`
apk_id="com.cisco.codec.unittest"
apk_main="com.cisco.codec.unittest/.MainActivity"
test_path="/sdcard/welsenc"
log_grep_params="welsenc"
test_res=./res
xml_file="sdcard/codec_unittest.xml"
for dev in $devices; do
#dev_info_file=${AUTO_TEST_RES_PATH}/${dev}.log
report_file=${AUTO_TEST_RES_PATH}/codec_unittest_${dev}_${rand}.xml
$ADB -s $dev uninstall ${apk_id}
$ADB -s $dev install -r ${apk}
#TODO: output more info about android device such as name,cpu,memory,and also power comsumption.
echo `$ADB -s $dev shell cat /system/build.prop |grep ro.product.model | awk -F"=" '{print $2}'`>${dev_info_file}
$ADB -s $dev push ${test_res} /sdcard/res
$ADB -s $dev shell am start --es path "$xml_file" -n ${apk_main}
# check whetehr the app is finished every 2 sec
for (( ; ; )); do
$ADB -s $dev shell ps | grep ${apk_id}
if [ $? -ne 0 ]; then
sleep 2
$ADB -s $dev shell ps | grep ${apk_id}
[ $? -ne 0 ] && break
fi
sleep 2
done
# kill logcat
$ADB -s $dev pull ${xml_file} ${report_file}
#delete the res
$ADB -s $dev shell rm -rf ${xml_file}
$ADB -s $dev shell rm -rf /sdcard/res
done
}
for apk in ${apk_name};do
run_apk $apk;
if [ $? -ne 0 ]
then
echo There is something wrong happened when run ${apk_name}
exit 1
else
echo Finished unit test on android
echo The test result is at ./android/report/xxx.xml
echo xxxxxxxxxxxxxxxAndroid unittest Endxxxxxxxxxxxxxxxx
fi
done

View File

@@ -0,0 +1,167 @@
#!/bin/bash
##############################################################
#Build ios test ref app
#set the default configuration
CODEC_TEST_IOS_ARCH="armv7"
CODEC_TEST_IOS_PLATFORM="iphoneos"
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
buildXcodeProject()
{
xcodebuild ARCHS="${CODEC_TEST_IOS_ARCH}" VALID_ARCHS="${CODEC_TEST_IOS_ARCH}" ONLY_ACTIVE_ARCH=NO -project $1 -target $2 -configuration $3 -sdk ${CODEC_TEST_IOS_PLATFORM} clean build
if [ $? -eq 0 ]; then
echo "build $1 $3 successfully"
else
echo "build $1 $3 fail"
exit 1
fi
}
iosUnitTest()
{
if [ $# -gt 2 ]; then
echo "Please use command $0 [armv7/armv7s/arm64] [release/debug]"
exit 1
fi
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/test/build/ios/codec_unittest/codec_unittest.xcodeproj/"
CODEC_TEST_IOS_PROJECT_NAME="codec_unittest"
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/test/build/ios/codec_unittest/build"
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
CODEC_TEST_IOS_APP_ID="com.cisco.codec-unittest"
CODEC_TEST_RES=${AUTO_TEST_SRC_PATH}/res
CODEC_TEST_LOG="codec_unittest"
for PARAM in $*; do
if [ "release" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
elif [ "debug" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Debug"
CODEC_TEST_IOS_REPORT_SUBFOLDER="debug"
elif [ "armv7" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="armv7"
elif [ "armv7s" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="armv7s"
elif [ "arm64" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="arm64"
else
echo parameters are illegal!!!, please have a check.
exit 1
fi
done
cd ${AUTO_TEST_SRC_PATH}
IOS_MAKE_PARAMS="OS=ios ARCH=${CODEC_TEST_IOS_ARCH}"
############make build
find ./ -name *.o -exec rm -rf {} \;
find ./ -name *.d -exec rm -rf {} \;
rm -f *.so
make clean
make ${IOS_MAKE_PARAMS} test
echo "Codec test will run on ${CODEC_TEST_IOS_PLATFORM} with ${CODEC_TEST_IOS_DEBUG_RELEASE}"
cd ${AUTO_TEST_IOS_PATH}
buildXcodeProject ${CODEC_TEST_XCODE_PROJECT_NAME} ${CODEC_TEST_IOS_PROJECT_NAME} ${CODEC_TEST_IOS_DEBUG_RELEASE} ${CODEC_TEST_IOS_PLATFORM}
##############run on ios devices#########################
# for real device
if [ ! -d ${CODEC_TEST_IOS_APP} ] ; then
echo "${CODEC_TEST_IOS_APP} is not found"
exit 1
else
echo "Find app ${CODEC_TEST_IOS_APP}"
fi
#ensure instruments not runing
echo "Try to kill the runing instruments"
pids_str=`ps x -o pid,command | grep -v grep | grep "instruments" | awk '{printf "%s,", $1}'`
instruments_pids="${pids_str//,/ }"
for pid in ${instruments_pids}; do
echo "Found instruments ${pid}. Killing..."
kill -9 ${pid} && wait ${pid} &> /dev/null
done
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
if [ "${DEVICES}#" == "#" ]
then
echo "Can not find any connected device! please check device is connected to MAC!"
exit 1
else
rand=`date +%s`
for DEVICE_ID in ${DEVICES}
do
echo "Try to run on device:${DEVICE_ID}"
#uninstall the application from device to remove the last result
${AUTO_TEST_IOS_SCRIPT_PATH}/fruitstrap uninstall --bundle ${CODEC_TEST_IOS_APP_ID} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo uninstall application: ${CODEC_TEST_IOS_APP} from device: ${DEVICE_ID} is failed!
fi
#install the application
${AUTO_TEST_IOS_SCRIPT_PATH}/fruitstrap install --bundle ${CODEC_TEST_IOS_APP} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo install application: ${CODEC_TEST_IOS_APP} to device: ${DEVICE_ID} is failed!
exit 1
fi
${AUTO_TEST_IOS_SCRIPT_PATH}/iFileTransfer -o copy -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from ${CODEC_TEST_RES}
instruments -w ${DEVICE_ID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ${CODEC_TEST_IOS_APP} -e UIASCRIPT ${AUTO_TEST_IOS_SCRIPT_PATH}/uiascript.js -e UIARRESULTPATH /tmp/
#copy to report folder
${AUTO_TEST_IOS_SCRIPT_PATH}/iFileTransfer -o download -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from /Documents/${CODEC_TEST_LOG}.xml -to ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CODEC_TEST_IOS_ARCH}.xml
if [ $? -ne 0 ]; then
echo "download file: ${CODEC_TEST_LOG}.xml from ${CODEC_TEST_IOS_APP_ID} is failed!"
exit 1
fi
done
fi
}
AUTO_TEST_IOS_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../.."
AUTO_TEST_IOS_SCRIPT_PATH="../../performanceTest/ios"
CODEC_TEST_IOS_REPORT_PATH="${AUTO_TEST_IOS_PATH}/report"
if [ ! -d ${CODEC_TEST_IOS_REPORT_PATH} ]
then
mkdir -p ${CODEC_TEST_IOS_REPORT_PATH}
else
echo "Will delete those outdate xml in the report"
rm -f ${CODEC_TEST_IOS_REPORT_PATH}/*.xml
fi
#start to run unittest,default run the xcode at arch armv7 with release
iosUnitTest armv7 release
if [ $? -ne 0 ]; then
echo "Running Unittest demo with armv7 is failed!"
exit 1
else
echo Finished unittest with armv7 on ios devices
echo the test result is generated at ./ios/report/xx.xml
fi
#start to run unittest,run the xcode at arch arm64 with release
iosUnitTest arm64 release
if [ $? -ne 0 ]; then
echo "Running Unittest demo with arm64 is failed!"
exit 1
else
echo Finished unittest with arm64 on ios devices
echo the test result is generated at ./ios/report/xx.xml
fi
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxIOS unittest Endxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#TODO:according to the trace of instruments to do some analysis
#find ${AUTO_TEST_IOS_SCRIPT_PATH} -name *.trace -exec rm -rf {} \;
rm -rf *.trace

View File

@@ -0,0 +1,70 @@
if [ $# -ne 1 ];then
echo Please input $0 [report dir]
exit 1
fi
REPORT=$1
if [ ! -e ${REPORT} ];then
echo "The directory of ${REPORT} dose't not exit,please check the test log"
exit 1
fi
UT_Failed_Num=0
parse_unittest() {
res=$1
echo ${res}
echo Start to parse unittest results of $res
if [ -e $res ];then
tests=`cat $res | grep "<testsuites" | awk -F " " '{print $2;}' | awk -F "\"" '{print $2;}'`
fails=`cat $res | grep "<testsuites" | awk -F " " '{print $3;}' | awk -F "\"" '{print $2;}'`
times=`cat $res | grep "<testsuites" | awk -F " " '{print $6;}' | awk -F "\"" '{print $2;}'`
waste=`cat $res | grep "<testsuites" | awk -F " " '{print $7;}' | awk -F "\"" '{print $2;}'`
msg="Total testcases: $tests, failed: $fails,time:$waste seconds, at$times,xml:$res"
echo ${msg}
UT_Failed_Num=$((${UT_Failed_Num}+${fails}))
cat >> mail.log << EOF
<style>
.fail {
background-color: yellow;
}
</style>
<br>
<table style="width:600px" cellspacing="0" border="1" width="100%">
<thead>
<tr>
<td>Total unit test cases</td>
<td>Failed</td>
<td>Time</td>
<td>Date</td>
</tr>
</thead>
<tbody>
<tr style="text-align:center; font-weight: bold;">
<td>${tests}</td>
<td><font class="fail">${fails}</font></td>
<td>${waste}</td>
<td>${times}</td>
</tr>
</tbody>
</table>
<br>
EOF
fi
}
xmlcount=`ls $REPORT | wc -l`
xmlfiles=`ls $REPORT`
if [ ${xmlcount} -eq 0 ];
then echo There is nothing xml files generated at $REPORT
exit 1
fi
for file in $xmlfiles;do
parse_unittest $REPORT/$file
done
if [ ${UT_Failed_Num} = "0" ];then
echo Total $xmlcount files at $REPORT,all sucessful
exit 0
else
echo Total $xmlcount files at $REPORT,${UT_Failed_Num} error cases
exit 2
fi

View File

@@ -0,0 +1,98 @@
#!/bin/bash
AUTO_TEST_PATH=`pwd`
IOS=0
ANDROID=0
#Prepare GTEST
AUTO_TEST_SRC_PATH="../../"
cd ${AUTO_TEST_SRC_PATH}
if [ ! -d "./gtest" ]
then
make gtest-bootstrap
fi
cd ${AUTO_TEST_PATH}
#To find whether have android devices
echo please set the enviroment variable as:
echo export ANDROID_HOME="path of android sdk"
echo export ANDROID_NDK_HOME="path of android ndk"
ANDROID_SDK_PATH=${ANDROID_HOME}
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
if [ "#${ANDROID_SDK_PATH}" = "#" ]
then
echo Please set ANDROID_HOME with the path of Android SDK
exit 1
fi
if [ "#${ANDROID_NDK_PATH}" = "#" ]
then
echo Please set ANDROID_NDK_HOME with the path of Android NDK
exit 1
fi
#prepare devices
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
#get devices
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
if [ "#$devices" = "#" ];then
echo "Can not find any android devices!"
else
echo Start to run the unittest on android devices
ANDROID=1
cd ./android
bash run_AutoTest_android.sh >/dev/null 2>&1
if [ $? -ne 0 ];then
echo There is something wrong happened when runing unittest on android devices,please to check
else
echo Finish run the unittest on android devices sucessfully
fi
cd ${AUTO_TEST_PATH}
fi
#To find whether have ios devices
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
if [ "${DEVICES}#" == "#" ]
then
echo "Can not find any ios devices!"
else
echo Start to run the unittest on ios devices
IOS=1
cd ./ios
bash run_AutoTest_ios.sh >/dev/null 2>&1
if [ $? -ne 0 ];then
echo There is something wrong happened when runing unittest on ios devices,please to check
else
echo Finish run the unittest on android devices sucessfully
fi
cd ${AUTO_TEST_PATH}
fi
#To parse the unit test result file to find whether have failures
if [ ${ANDROID} = "1" ];then
echo "
<style>
.env {
background-color: #95B9C7;
font: 30px bold;
}</style>">>mail.log
echo "<br><font class="env">Run unit test on android devices</font>">>mail.log
bash run_ParseUTxml.sh ./android/report
ret=$?
if [ ${ret} -eq 0 ];then
echo Unit test run on the android devices have not any failure case
elif [ ${ret} -eq 2 ];then
echo Unit test have cases failed,please check
elif [ ${ret} -eq 1 ];then
echo Unit test run failed
fi
fi
if [ ${IOS} = "1" ];then
echo "<br><font class="env">Run unit test on ios devices with armv7 & arm64</font>">>mail.log
bash run_ParseUTxml.sh ./ios/report
ret=$?
if [ $ret -eq 0 ];then
echo Unit test run on the ios devices have not any failure case
elif [ $ret -eq 2 ];then
echo Unit test have cases failed,please check
elif [ $ret -eq 1 ];then
echo Unit test run failed
fi
fi

View File

@@ -1,17 +1,17 @@
ifneq ($(filter %86 x86_64, $(ARCH)),)
include build/platform-x86-common.mk
include $(SRC_PATH)build/x86-common.mk
endif
ifneq ($(filter-out arm64, $(filter arm%, $(ARCH))),)
ifeq ($(USE_ASM), Yes)
ASM_ARCH = arm
ASMFLAGS += -Icodec/common/arm/
ASMFLAGS += -I$(SRC_PATH)codec/common/arm/
CFLAGS += -DHAVE_NEON
endif
endif
ifneq ($(filter arm64 aarch64, $(ARCH)),)
ifeq ($(USE_ASM), Yes)
ASM_ARCH = arm64
ASMFLAGS += -Icodec/common/arm64/
ASMFLAGS += -I$(SRC_PATH)codec/common/arm64/
CFLAGS += -DHAVE_NEON_AARCH64
endif
endif

View File

@@ -5,6 +5,7 @@ GTEST_CPP_SRCS=\
GTEST_OBJS += $(GTEST_CPP_SRCS:.cc=.$(OBJ))
OBJS += $(GTEST_OBJS)
$(GTEST_SRCDIR)/%.$(OBJ): $(GTEST_SRCDIR)/%.cc
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(GTEST_CFLAGS) $(GTEST_INCLUDES) -c $(CXX_O) $<

View File

@@ -134,37 +134,42 @@ if len(cfiles) > 0:
for cfile in cfiles:
f.write("\t$(%s_SRCDIR)/%s\\\n"%(PREFIX, cfile))
f.write("\n")
f.write("%s_OBJS += $(%s_C_SRCS:.c=.$(OBJ))\n\n"%(PREFIX, PREFIX))
f.write("%s_OBJS += $(%s_C_SRCS:.c=.$(OBJ))\n"%(PREFIX, PREFIX))
if len(asm) > 0:
f.write("ifeq ($(ASM_ARCH), x86)\n")
f.write("%s_ASM_SRCS=\\\n"%(PREFIX))
for c in asm:
f.write("\t$(%s_SRCDIR)/%s\\\n"%(PREFIX, c))
f.write("\n")
f.write("%s_OBJS += $(%s_ASM_SRCS:.asm=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("endif\n\n")
f.write("%s_OBJSASM += $(%s_ASM_SRCS:.asm=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("ifeq ($(ASM_ARCH), x86)\n")
f.write("%s_OBJS += $(%s_OBJSASM)\n"%(PREFIX,PREFIX))
f.write("endif\n")
f.write("OBJS += $(%s_OBJSASM)\n\n"%(PREFIX))
if len(armfiles) > 0:
f.write("ifeq ($(ASM_ARCH), arm)\n")
f.write("%s_ASM_ARM_SRCS=\\\n"%(PREFIX))
for c in armfiles:
f.write("\t$(%s_SRCDIR)/%s\\\n"%(PREFIX, c))
f.write("\n")
f.write("%s_OBJS += $(%s_ASM_ARM_SRCS:.S=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("endif\n\n")
f.write("%s_OBJSARM += $(%s_ASM_ARM_SRCS:.S=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("ifeq ($(ASM_ARCH), arm)\n")
f.write("%s_OBJS += $(%s_OBJSARM)\n"%(PREFIX,PREFIX))
f.write("endif\n")
f.write("OBJS += $(%s_OBJSARM)\n\n"%(PREFIX))
if len(arm64files) > 0:
f.write("ifeq ($(ASM_ARCH), arm64)\n")
f.write("%s_ASM_ARM64_SRCS=\\\n"%(PREFIX))
for c in arm64files:
f.write("\t$(%s_SRCDIR)/%s\\\n"%(PREFIX, c))
f.write("\n")
f.write("%s_OBJS += $(%s_ASM_ARM64_SRCS:.S=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("endif\n\n")
f.write("OBJS += $(%s_OBJS)\n"%PREFIX)
f.write("%s_OBJSARM64 += $(%s_ASM_ARM64_SRCS:.S=.$(OBJ))\n"%(PREFIX, PREFIX))
f.write("ifeq ($(ASM_ARCH), arm64)\n")
f.write("%s_OBJS += $(%s_OBJSARM64)\n"%(PREFIX,PREFIX))
f.write("endif\n")
f.write("OBJS += $(%s_OBJSARM64)\n\n"%(PREFIX))
f.write("OBJS += $(%s_OBJS)\n\n"%(PREFIX))
write_cpp_rule_pattern(f)
if len(cfiles) > 0:

View File

@@ -1,4 +1,4 @@
include build/platform-arch.mk
include $(SRC_PATH)build/arch.mk
ifeq ($(ASM_ARCH), x86)
ifeq ($(ENABLE64BIT), Yes)
ASMFLAGS += -f win64
@@ -26,7 +26,7 @@ CFLAGS += -nologo -W3 -EHsc -fp:precise -Zc:wchar_t -Zc:forScope -D_VARIADIC_MAX
CXX_LINK_O=-nologo -Fe$@
AR_OPTS=-nologo -out:$@
CFLAGS_OPT=-O2 -Ob1 -Oy- -Zi -GF -Gm- -GS -Gy -DNDEBUG
CFLAGS_DEBUG=-Od -Oy- -ZI -RTC1 -D_DEBUG
CFLAGS_DEBUG=-Od -Oy- -Zi -RTC1 -D_DEBUG
CFLAGS_M32=
CFLAGS_M64=
LINK_LOCAL_DIR=
@@ -35,7 +35,9 @@ LIBSUFFIX=lib
LIBPREFIX=
EXEEXT=.exe
OBJ=obj
SHAREDLIB_DIR = $(PREFIX)/bin
SHAREDLIBSUFFIX=dll
SHAREDLIBSUFFIXVER=$(SHAREDLIBSUFFIX)
SHARED=-LD
SHLDFLAGS=-link -def:openh264.def -implib:$(PROJECT_NAME)_dll.lib
EXTRA_LIBRARY=$(PROJECT_NAME)_dll.lib
SHLDFLAGS=-link -def:openh264.def -implib:$(EXTRA_LIBRARY)

View File

@@ -1,6 +1,9 @@
ARCH = arm
include build/platform-arch.mk
include $(SRC_PATH)build/arch.mk
SHAREDLIBSUFFIX = so
# Android APK/JARs expect libraries to be unversioned
SHAREDLIBSUFFIXVER=$(SHAREDLIBSUFFIX)
SHLDFLAGS =
NDKLEVEL = 12
ifeq ($(ARCH), arm)
ifneq ($(APP_ABI), armeabi)
@@ -9,19 +12,23 @@ ifeq ($(ARCH), arm)
LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
APP_ABI = armeabi-v7a
endif
TOOLCHAINPREFIX = $(shell NDK_PROJECT_PATH=./codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_PREFIX APP_ABI=armeabi)
ifeq (Yes, $(USE_ASM))
ASMFLAGS += -march=armv7-a -mfpu=neon
endif
else ifeq ($(ARCH), arm64)
APP_ABI = arm64-v8a
else ifeq ($(ARCH), x86)
APP_ABI = x86
TOOLCHAINPREFIX = $(shell NDK_PROJECT_PATH=./codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_PREFIX APP_ABI=x86)
APP_ABI = x86
ifeq (Yes, $(USE_ASM))
ASMFLAGS += -f elf32
ASMFLAGS += -f elf
endif
else ifeq ($(ARCH), x86_64)
APP_ABI = x86_64
ifeq (Yes, $(USE_ASM))
ASMFLAGS += -f elf64
endif
else
APP_ABI = $(ARCH)
TOOLCHAINPREFIX = $(shell NDK_PROJECT_PATH=./codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_PREFIX APP_ABI=$(APP_ABI))
APP_ABI = $(ARCH)
endif
ifndef NDKROOT
@@ -31,6 +38,8 @@ ifndef TARGET
$(error TARGET is not set)
endif
TOOLCHAINPREFIX = $(shell NDK_PROJECT_PATH=$(SRC_PATH)/codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_PREFIX APP_ABI=$(APP_ABI))
SYSROOT = $(NDKROOT)/platforms/android-$(NDKLEVEL)/arch-$(ARCH)
CXX = $(TOOLCHAINPREFIX)g++
CC = $(TOOLCHAINPREFIX)gcc
@@ -38,7 +47,13 @@ AR = $(TOOLCHAINPREFIX)ar
CFLAGS += -DANDROID_NDK -fpic --sysroot=$(SYSROOT) -MMD -MP
CXXFLAGS += -fno-rtti -fno-exceptions
LDFLAGS += --sysroot=$(SYSROOT)
SHLDFLAGS = -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,-soname,lib$(PROJECT_NAME).so
SHLDFLAGS = -Wl,--no-undefined -Wl,-z,relro -Wl,-z,now -Wl,-soname,lib$(PROJECT_NAME).so
ifneq ($(CXX),$(wildcard $(CXX)))
ifneq ($(CXX).exe,$(wildcard $(CXX).exe))
$(error Compiler not found, bad NDKROOT or ARCH?)
endif
endif
STL_INCLUDES = \
-I$(NDKROOT)/sources/cxx-stl/stlport/stlport
@@ -51,6 +66,7 @@ CODEC_UNITTEST_LDFLAGS_SUFFIX = $(STL_LIB)
MODULE_INCLUDES = $(STL_INCLUDES)
MODULE_LDFLAGS = $(STL_LIB)
ifeq (./,$(SRC_PATH))
binaries : decdemo encdemo
decdemo: libraries
@@ -65,6 +81,12 @@ clean_Android_dec:
-cd ./codec/build/android/dec && $(NDKROOT)/ndk-build APP_ABI=$(APP_ABI) clean && ant clean
clean_Android_enc:
-cd ./codec/build/android/enc && $(NDKROOT)/ndk-build APP_ABI=$(APP_ABI) clean && ant clean
else
all:
@:
clean_Android:
@:
endif
COMMON_INCLUDES += -I$(NDKROOT)/sources/android/cpufeatures
COMMON_OBJS += $(COMMON_SRCDIR)/src/cpu-features.$(OBJ)

View File

@@ -1,5 +1,10 @@
include build/platform-arch.mk
include $(SRC_PATH)build/arch.mk
SHAREDLIB_DIR = $(PREFIX)/lib
SHAREDLIBSUFFIX = dylib
SHAREDLIBSUFFIXVER=$(SHAREDLIBVERSION).$(SHAREDLIBSUFFIX)
SHLDFLAGS = -dynamiclib -twolevel_namespace -undefined dynamic_lookup \
-fno-common -headerpad_max_install_names -install_name \
$(SHAREDLIB_DIR)/$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER)
SHARED = -dynamiclib
CFLAGS += -Wall -fPIC -MMD -MP
LDFLAGS += -lpthread

View File

@@ -1,5 +1,7 @@
include build/platform-arch.mk
include $(SRC_PATH)build/arch.mk
SHAREDLIBSUFFIX = so
SHAREDLIBSUFFIXVER=$(SHAREDLIBSUFFIX).$(SHAREDLIBVERSION)
SHLDFLAGS = -Wl,-soname,$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER)
CFLAGS += -fPIC
LDFLAGS += -lpthread
ifeq ($(ASM_ARCH), x86)

View File

@@ -1,5 +1,5 @@
ARCH = armv7
include build/platform-darwin.mk
include $(SRC_PATH)build/platform-darwin.mk
CXX = clang++
CC = clang
ifneq ($(filter %86 x86_64, $(ARCH)),)

View File

@@ -1,12 +1,14 @@
include build/platform-arch.mk
include $(SRC_PATH)build/arch.mk
SHAREDLIBSUFFIX = so
SHAREDLIBSUFFIXVER=$(SHAREDLIBSUFFIX).$(SHAREDLIBVERSION)
SHLDFLAGS = -Wl,-soname,$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXVER)
CFLAGS += -Wall -fno-strict-aliasing -fPIC -MMD -MP
LDFLAGS += -lpthread
ifeq ($(ASM_ARCH), x86)
ifeq ($(ENABLE64BIT), Yes)
ASMFLAGS += -f elf64
else
ASMFLAGS += -f elf32
ASMFLAGS += -f elf
endif
endif
ifeq ($(ASM_ARCH), arm)

View File

@@ -1,5 +1,9 @@
include build/platform-x86-common.mk
include $(SRC_PATH)build/x86-common.mk
SHAREDLIB_DIR = $(PREFIX)/bin
SHAREDLIBSUFFIX = dll
SHAREDLIBSUFFIXVER=$(SHAREDLIBSUFFIX)
EXTRA_LIBRARY=$(LIBPREFIX)$(PROJECT_NAME).dll.a
SHLDFLAGS = -Wl,--out-implib,$(EXTRA_LIBRARY)
CFLAGS += -MMD -MP
LDFLAGS +=
ifeq ($(ENABLE64BIT), Yes)

View File

@@ -1,5 +1,5 @@
ARCH = arm
include build/platform-msvc-common.mk
include $(SRC_PATH)build/msvc-common.mk
CFLAGS_OPT += -MD
CFLAGS_DEBUG += -MDd
CFLAGS += -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP

View File

@@ -1,4 +1,4 @@
include build/platform-msvc-common.mk
include $(SRC_PATH)build/msvc-common.mk
LDFLAGS += user32.lib
CFLAGS_OPT += -MT
CFLAGS_DEBUG += -MTd -Gm

View File

@@ -1,6 +1,6 @@
CFLAGS_M32=-m32
CFLAGS_M64=-m64
ASM_INCLUDES = -Icodec/common/x86/
ASM_INCLUDES = -I$(SRC_PATH)codec/common/x86/
ifeq (, $(ENABLE64BIT))
ifeq ($(ARCH), x86_64)
ENABLE64BIT=Yes

View File

@@ -1,4 +1,6 @@
/*!
*@page License
*
* \copy
* Copyright (c) 2013, Cisco Systems
* All rights reserved.
@@ -50,71 +52,363 @@ typedef unsigned char bool;
#define EXTAPI
#endif
/**
* @file codec_api.h
*/
/**
* @page Overview
* * This page is for openh264 codec API usage.
* * For how to use the encoder,please refer to page UsageExampleForEncoder
* * For how to use the decoder,please refer to page UsageExampleForDecoder
* * For more detail about ISVEncoder,please refer to page ISVCEnoder
* * For more detail about ISVDecoder,please refer to page ISVCDecoder
*/
/**
* @page DecoderUsageExample
*
* @brief
* * An example for using the decoder for Decoding only or Parsing only
*
* Step 1:decoder declaration
* @code
*
* //decoder declaration
* ISVCDecoder *pSvcDecoder;
* //input: encoded bitstream start position; should include start code prefix
* unsigned char *pBuf =...;
* //input: encoded bit stream length; should include the size of start code prefix
* int iSize =...;
* //output: [0~2] for Y,U,V buffer for Decoding only
* unsigned char *pData[3] =...;
* //in-out: for Decoding only: declare and initialize the output buffer info, this should never co-exist with Parsing only
* SBufferInfo sDstBufInfo;
* memset(&sDstBufInfo, 0, sizeof(SBufferInfo));
* //in-out: for Parsing only: declare and initialize the output bitstream buffer info for parse only, this should never co-exist with Decoding only
* SParserBsInfo sDstParseInfo;
* memset(&sDstParseInfo, 0, sizeof(SParserBsInfo));
* sDstParseInfo.pDstBuff = new unsigned char[PARSE_SIZE]; //In Parsing only, allocate enough buffer to save transcoded bitstream for a frame
*
* @endcode
*
* Step 2:decoder creation
* @code
* CreateDecoder(pSvcDecoder);
* @endcode
*
* Step 3:declare required parameter, used to differentiate Decoding only and Parsing only
* @code
* SDecodingParam sDecParam = {0};
* sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC;
* //for Parsing only, the assignment is mandatory
* sDecParam.bParseOnly = true;
* @endcode
*
* Step 4:initialize the parameter and decoder context, allocate memory
* @code
* Initialize(&sDecParam);
* @endcode
*
* Step 5:do actual decoding process in slice level;
* this can be done in a loop until data ends
* @code
* //for Decoding only
* iRet = DecodeFrame2(pBuf, iSize, pData, &sDstBufInfo);
* //for Parsing only
* iRet = DecodeParser(pBuf, iSize, &sDstParseInfo);
* //decode failed
* If (iRet != 0){
* RequestIDR or something like that.
* }
* //for Decoding only, pData can be used for render.
* if (sDstBufInfo.iBufferStatus==1){
* output pData[0], pData[1], pData[2];
* }
* //for Parsing only, sDstParseInfo can be used for, e.g., HW decoding
* if (sDstBufInfo.iBufferStatus==1){
* Hardware decoding sDstParseInfo;
* }
* //no-delay decoding can be realized by directly calling decoder again with NULL input, as in the following. In this case, decoder would immediately reconstruct the input data. This can also be used similarly for Parsing only. Consequent decoding error and output indication should also be considered as above.
* iRet = DecodeFrame2(NULL, 0, pData, &sDstBufInfo);
* judge iRet, sDstBufInfo.iBufferStatus ...
* @endcode
*
* Step 6:uninitialize the decoder and memory free
* @code
* Uninitialize();
* @endcode
*
* Step 7:destroy the decoder
* @code
* DestroyDecoder();
* @endcode
*
*/
/**
* @page EncoderUsageExample1
*
* @brief
* * An example for using encoder with basic parameter
*
* Step1:setup encoder
* @code
* int rv = WelsCreateSVCEncoder (&encoder_);
* ASSERT_EQ (0, rv);
* ASSERT_TRUE (encoder_ != NULL);
* @endcode
*
* Step2:initilize with basic parameter
* @code
* SEncParamBase param;
* memset (&param, 0, sizeof (SEncParamBase));
* param.iUsageType = usageType;
* param.fMaxFrameRate = frameRate;
* param.iPicWidth = width;
* param.iPicHeight = height;
* param.iTargetBitrate = 5000000;
* encoder_->Initialize (&param);
* @endcode
*
* Step3:set option, set option during encoding process
* @code
* encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &g_LevelSetting);
* int videoFormat = videoFormatI420;
* encoder_->SetOption (ENCODER_OPTION_DATAFORMAT, &videoFormat);
* @endcode
*
* Step4: encode and store ouput bistream
* @code
* int frameSize = width * height * 3 / 2;
* BufferedData buf;
* buf.SetLength (frameSize);
* ASSERT_TRUE (buf.Length() == (size_t)frameSize);
* SFrameBSInfo info;
* memset (&info, 0, sizeof (SFrameBSInfo));
* SSourcePicture pic;
* memset (&pic, 0, sizeof (SsourcePicture));
* pic.iPicWidth = width;
* pic.iPicHeight = height;
* pic.iColorFormat = videoFormatI420;
* pic.iStride[0] = pic.iPicWidth;
* pic.iStride[1] = pic.iStride[2] = pic.iPicWidth >> 1;
* pic.pData[0] = buf.data();
* pic.pData[1] = pic.pData[0] + width * height;
* pic.pData[2] = pic.pData[1] + (width * height >> 2);
* for(int num = 0;num<total_num;num++) {
* //prepare input data
* rv = encoder_->EncodeFrame (&pic, &info);
* ASSERT_TRUE (rv == cmResultSuccess);
* if (info.eFrameType != videoFrameTypeSkip && cbk != NULL) {
* //output bitstream
* }
* }
* @endcode
*
* Step5:teardown encoder
* @code
* if (encoder_) {
* encoder_->Uninitialize();
* WelsDestroySVCEncoder (encoder_);
* }
* @endcode
*
*/
/**
* @page EncoderUsageExample2
*
* @brief
* * An example for using the encoder with extension parameter.
* * The same operation on Step 1,3,4,5 with Example-1
*
* Step 2:initialize with extension parameter
* @code
* SEncParamExt param;
* encoder->GetDefaultParams (&param);
* param.iUsageType = usageType;
* param.fMaxFrameRate = frameRate;
* param.iPicWidth = width;
* param.iPicHeight = height;
* param.iTargetBitrate = 5000000;
* param.bEnableDenoise = denoise;
* param.iSpatialLayerNum = layers;
* //SM_DYN_SLICE don't support multi-thread now
* if (sliceMode != SM_SINGLE_SLICE && sliceMode != SM_DYN_SLICE)
* param.iMultipleThreadIdc = 2;
*
* for (int i = 0; i < param.iSpatialLayerNum; i++) {
* param.sSpatialLayers[i].iVideoWidth = width >> (param.iSpatialLayerNum - 1 - i);
* param.sSpatialLayers[i].iVideoHeight = height >> (param.iSpatialLayerNum - 1 - i);
* param.sSpatialLayers[i].fFrameRate = frameRate;
* param.sSpatialLayers[i].iSpatialBitrate = param.iTargetBitrate;
*
* param.sSpatialLayers[i].sSliceCfg.uiSliceMode = sliceMode;
* if (sliceMode == SM_DYN_SLICE) {
* param.sSpatialLayers[i].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 600;
* param.uiMaxNalSize = 1500;
* }
* }
* param.iTargetBitrate *= param.iSpatialLayerNum;
* encoder_->InitializeExt (&param);
* int videoFormat = videoFormatI420;
* encoder_->SetOption (ENCODER_OPTION_DATAFORMAT, &videoFormat);
*
* @endcode
*/
#ifdef __cplusplus
/**
* @brief Endocder definition
*/
class ISVCEncoder {
public:
/*
* return: CM_RETURN: 0 - success; otherwise - failed;
*/
/**
* @brief Initialize the encoder
* @param pParam basic encoder parameter
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual int EXTAPI Initialize (const SEncParamBase* pParam) = 0;
/**
* @brief Initilaize encoder by using extension parameters.
* @param pParam extension parameter for encoder
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) = 0;
/**
* @brief Get the default extension parameters.
* If you want to change some parameters of encoder, firstly you need to get the default encoding parameters,
* after that you can change part of parameters you want to.
* @param pParam extension parameter for encoder
* @return CM_RETURN: 0 - success; otherwise - failed;
* */
virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) = 0;
/// uninitialize the encoder
virtual int EXTAPI Uninitialize() = 0;
/*
* return: 0 - success; otherwise -failed;
*/
/**
* @brief Encode one frame
* @param kpSrcPic the pointer to the source luminance plane
* chrominance data:
* CbData = kpSrc + m_iMaxPicWidth * m_iMaxPicHeight;
* CrData = CbData + (m_iMaxPicWidth * m_iMaxPicHeight)/4;
* the application calling this interface needs to ensure the data validation between the location
* @param pBsInfo output bit stream
* @return 0 - success; otherwise -failed;
*/
virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0;
/*
* return: 0 - success; otherwise - failed;
*/
/**
* @brief Encode the parameters from output bit stream
* @param pBsInfo output bit stream
* @return 0 - success; otherwise - failed;
*/
virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo) = 0;
/*
* return: 0 - success; otherwise - failed;
*/
virtual int EXTAPI PauseFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0;
/*
* return: 0 - success; otherwise - failed;
*/
/**
* @brief Force encoder to encoder frame as IDR if bIDR set as true
* @param bIDR true: force encoder to encode frame as IDR frame;false, return 1 and nothing to do
* @return 0 - success; otherwise - failed;
*/
virtual int EXTAPI ForceIntraFrame (bool bIDR) = 0;
/************************************************************************
* InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,..
************************************************************************/
/*
* return: CM_RETURN: 0 - success; otherwise - failed;
*/
/**
* @brief Set option for encoder, detail option type, please refer to enumurate ENCODER_OPTION.
* @param pOption option for encoder such as InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,...
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual int EXTAPI SetOption (ENCODER_OPTION eOptionId, void* pOption) = 0;
/**
* @brief Set option for encoder, detail option type, please refer to enumurate ENCODER_OPTION.
* @param pOption option for encoder such as InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,...
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual int EXTAPI GetOption (ENCODER_OPTION eOptionId, void* pOption) = 0;
virtual ~ISVCEncoder() {}
};
/**
* @brief Decoder definition
*/
class ISVCDecoder {
public:
/**
* @brief Initilaize decoder
* @param pParam parameter for decoder
* @return 0 - success; otherwise - failed;
*/
virtual long EXTAPI Initialize (const SDecodingParam* pParam) = 0;
/// Uninitialize the decoder
virtual long EXTAPI Uninitialize() = 0;
/**
* @brief Decode one frame
* @param pSrc the h264 stream to be decoded
* @param iSrcLen the length of h264 stream
* @param ppDst buffer pointer of decoded data (YUV)
* @param pStride output stride
* @param iWidth output width
* @param iHeight output height
* @return 0 - success; otherwise -failed;
*/
virtual DECODING_STATE EXTAPI DecodeFrame (const unsigned char* pSrc,
const int iSrcLen,
unsigned char** ppDst,
int* pStride,
int& iWidth,
int& iHeight) = 0;
/*
* return: 0 - success; otherwise -failed;
*/
/**
* @brief For slice level DecodeFrame2() (4 parameters input),
* whatever the function return value is, the output data
* of I420 format will only be available when pDstInfo->iBufferStatus == 1,.
* (e.g., in multi-slice cases, only when the whole picture
* is completely reconstructed, this variable would be set equal to 1.)
* @param pSrc the h264 stream to be decoded
* @param iSrcLen the length of h264 stream
* @param ppDst buffer pointer of decoded data (YUV)
* @param pDstInfo information provided to API(width, height, etc.)
* @return 0 - success; otherwise -failed;
*/
virtual DECODING_STATE EXTAPI DecodeFrame2 (const unsigned char* pSrc,
const int iSrcLen,
unsigned char** ppDst,
SBufferInfo* pDstInfo) = 0;
/*
* this API does not work for now!! This is for future use to support non-I420 color format output.
*/
/**
* @brief This function parse input bitstream only, and rewrite possible SVC syntax to AVC syntax
* @param pSrc the h264 stream to be decoded
* @param iSrcLen the length of h264 stream
* @param pDstInfo bit stream info
* @return 0 - success; otherwise -failed;
*/
virtual DECODING_STATE EXTAPI DecodeParser (const unsigned char* pSrc,
const int iSrcLen,
SParserBsInfo* pDstInfo) = 0;
/**
* @brief This API does not work for now!! This is for future use to support non-I420 color format output.
* @param pSrc the h264 stream to be decoded
* @param iSrcLen the length of h264 stream
* @param pDst buffer pointer of decoded data (YUV)
* @param iDstStride output stride
* @param iDstLen bit stream info
* @param iWidth output width
* @param iHeight output height
* @param iColorFormat output color format
* @return to do ...
*/
virtual DECODING_STATE EXTAPI DecodeFrameEx (const unsigned char* pSrc,
const int iSrcLen,
unsigned char* pDst,
@@ -124,10 +418,18 @@ class ISVCDecoder {
int& iHeight,
int& iColorFormat) = 0;
/*************************************************************************
* OutDataFormat, Eos Flag, EC method, ...
*************************************************************************/
/**
* @brief Set option for decoder, detail option type, please refer to enumurate DECODER_OPTION.
* @param pOption option for decoder such as OutDataFormat, Eos Flag, EC method, ...
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual long EXTAPI SetOption (DECODER_OPTION eOptionId, void* pOption) = 0;
/**
* @brief Get option for decoder, detail option type, please refer to enumurate DECODER_OPTION.
* @param pOption option for decoder such as OutDataFormat, Eos Flag, EC method, ...
* @return CM_RETURN: 0 - success; otherwise - failed;
*/
virtual long EXTAPI GetOption (DECODER_OPTION eOptionId, void* pOption) = 0;
virtual ~ISVCDecoder() {}
};
@@ -151,8 +453,6 @@ int (*Uninitialize) (ISVCEncoder*);
int (*EncodeFrame) (ISVCEncoder*, const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo);
int (*EncodeParameterSets) (ISVCEncoder*, SFrameBSInfo* pBsInfo);
int (*PauseFrame) (ISVCEncoder*, const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo);
int (*ForceIntraFrame) (ISVCEncoder*, bool bIDR);
int (*SetOption) (ISVCEncoder*, ENCODER_OPTION eOptionId, void* pOption);
@@ -177,6 +477,10 @@ DECODING_STATE (*DecodeFrame2) (ISVCDecoder*, const unsigned char* pSrc,
unsigned char** ppDst,
SBufferInfo* pDstInfo);
DECODING_STATE (*DecodeParser) (ISVCDecoder*, const unsigned char* pSrc,
const int iSrcLen,
SParserBsInfo* pDstInfo);
DECODING_STATE (*DecodeFrameEx) (ISVCDecoder*, const unsigned char* pSrc,
const int iSrcLen,
unsigned char* pDst,
@@ -193,12 +497,45 @@ long (*GetOption) (ISVCDecoder*, DECODER_OPTION eOptionId, void* pOption);
typedef void (*WelsTraceCallback) (void* ctx, int level, const char* string);
/** @brief Create encoder
* @param ppEncoder encoder
* @return 0 - success; otherwise - failed;
*/
int WelsCreateSVCEncoder (ISVCEncoder** ppEncoder);
/** @brief Destroy encoder
* @param pEncoder encoder
* @return void
*/
void WelsDestroySVCEncoder (ISVCEncoder* pEncoder);
/** @brief Get the capability of decoder
* @param pDecCapability decoder capability
* @return 0 - success; otherwise - failed;
*/
int WelsGetDecoderCapability (SDecoderCapability* pDecCapability);
/** @brief Create decoder
* @param ppDecoder decoder
* @return 0 - success; otherwise - failed;
*/
long WelsCreateDecoder (ISVCDecoder** ppDecoder);
/** @brief Destroy decoder
* @param pDecoder decoder
* @return void
*/
void WelsDestroyDecoder (ISVCDecoder* pDecoder);
/** @brief Get codec version
* @return The linked codec version
*/
OpenH264Version WelsGetCodecVersion ();
#ifdef __cplusplus
}
#endif

View File

@@ -30,9 +30,15 @@
*
*/
#ifndef WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__
#define WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__
////////////////Data and /or structures introduced in Cisco OpenH264 application////////////////
/**
* @file codec_app_def.h
* @brief Data and /or structures introduced in Cisco OpenH264 application
*/
#include "codec_def.h"
/* Constants */
#define MAX_TEMPORAL_LAYER_NUM 4
@@ -40,181 +46,268 @@
#define MAX_QUALITY_LAYER_NUM 4
#define MAX_LAYER_NUM_OF_FRAME 128
#define MAX_NAL_UNITS_IN_LAYER 128 // predetermined here, adjust it later if need
#define MAX_NAL_UNITS_IN_LAYER 128 ///< predetermined here, adjust it later if need
#define MAX_RTP_PAYLOAD_LEN 1000
#define AVERAGE_RTP_PAYLOAD_LEN 800
#define SAVED_NALUNIT_NUM_TMP ( (MAX_SPATIAL_LAYER_NUM*MAX_QUALITY_LAYER_NUM) + 1 + MAX_SPATIAL_LAYER_NUM ) //SPS/PPS + SEI/SSEI + PADDING_NAL
#define SAVED_NALUNIT_NUM_TMP ( (MAX_SPATIAL_LAYER_NUM*MAX_QUALITY_LAYER_NUM) + 1 + MAX_SPATIAL_LAYER_NUM ) ///< SPS/PPS + SEI/SSEI + PADDING_NAL
#define MAX_SLICES_NUM_TMP ( ( MAX_NAL_UNITS_IN_LAYER - SAVED_NALUNIT_NUM_TMP ) / 3 )
#define AUTO_REF_PIC_COUNT -1 // encoder selects the number of reference frame automatically
typedef enum {
/* Errors derived from bitstream parsing */
dsErrorFree = 0x00, /* Bitstream error-free */
dsFramePending = 0x01, /* Need more throughput to generate a frame output, */
dsRefLost = 0x02, /* layer lost at reference frame with temporal id 0 */
dsBitstreamError = 0x04, /* Error bitstreams(maybe broken internal frame) the decoder cared */
dsDepLayerLost = 0x08, /* Dependented layer is ever lost */
dsNoParamSets = 0x10, /* No parameter set NALs involved */
dsDataErrorConcealed = 0x20, /* current data Error concealed specified */
/* Errors derived from logic level */
dsInvalidArgument = 0x1000, /* Invalid argument specified */
dsInitialOptExpected = 0x2000, /* Initializing operation is expected */
dsOutOfMemory = 0x4000, /* Out of memory due to new request */
/* ANY OTHERS? */
dsDstBufNeedExpand = 0x8000 /* Actual picture size exceeds size of dst pBuffer feed in decoder, so need expand its size */
#define AUTO_REF_PIC_COUNT -1 ///< encoder selects the number of reference frame automatically
#define UNSPECIFIED_BIT_RATE 0 ///< to do: add detail comment
/**
* @brief Struct of OpenH264 version
*/
///
/// E.g. SDK version is 1.2.0.0, major version number is 1, minor version number is 2, and revision number is 0.
typedef struct _tagVersion
{
unsigned int uMajor; ///< The major version number
unsigned int uMinor; ///< The minor version number
unsigned int uRevision; ///< The revision number
unsigned int uReserved; ///< The reserved number, it should be 0.
} OpenH264Version;
/**
* @brief Decoding status
*/
typedef enum {
/**
* Errors derived from bitstream parsing
*/
dsErrorFree = 0x00, ///< bit stream error-free
dsFramePending = 0x01, ///< need more throughput to generate a frame output,
dsRefLost = 0x02, ///< layer lost at reference frame with temporal id 0
dsBitstreamError = 0x04, ///< error bitstreams(maybe broken internal frame) the decoder cared
dsDepLayerLost = 0x08, ///< dependented layer is ever lost
dsNoParamSets = 0x10, ///< no parameter set NALs involved
dsDataErrorConcealed = 0x20, ///< current data error concealed specified
/**
* Errors derived from logic level
*/
dsInvalidArgument = 0x1000, ///< invalid argument specified
dsInitialOptExpected = 0x2000, ///< initializing operation is expected
dsOutOfMemory = 0x4000, ///< out of memory due to new request
/**
* ANY OTHERS?
*/
dsDstBufNeedExpan = 0x8000 ///< actual picture size exceeds size of dst pBuffer feed in decoder, so need expand its size
} DECODING_STATE;
/* Option types introduced in SVC encoder application */
/**
* @brief Option types introduced in SVC encoder application
*/
typedef enum {
ENCODER_OPTION_DATAFORMAT = 0,
ENCODER_OPTION_IDR_INTERVAL,
ENCODER_OPTION_SVC_ENCODE_PARAM_BASE,
ENCODER_OPTION_SVC_ENCODE_PARAM_EXT,
ENCODER_OPTION_FRAME_RATE,
ENCODER_OPTION_IDR_INTERVAL, ///< IDR period,0/-1 means no Intra period (only the first frame); lager than 0 means the desired IDR period, must be multiple of (2^temporal_layer)
ENCODER_OPTION_SVC_ENCODE_PARAM_BASE, ///< structure of Base Param
ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, ///< structure of Extension Param
ENCODER_OPTION_FRAME_RATE, ///< maximal input frame rate, current supported range: MAX_FRAME_RATE = 30,MIN_FRAME_RATE = 1
ENCODER_OPTION_BITRATE,
ENCODER_OPTION_MAX_BITRATE,
ENCODER_OPTION_INTER_SPATIAL_PRED,
ENCODER_OPTION_RC_MODE,
ENCODER_PADDING_PADDING,
ENCODER_PADDING_PADDING, ///< 0:disable padding;1:padding
ENCODER_OPTION_PROFILE,
ENCODER_OPTION_LEVEL,
ENCODER_OPTION_NUMBER_REF,
ENCODER_OPTION_DELIVERY_STATUS,
ENCODER_OPTION_PROFILE, ///< assgin the profile for each layer
ENCODER_OPTION_LEVEL, ///< assgin the level for each layer
ENCODER_OPTION_NUMBER_REF, ///< the number of refererence frame
ENCODER_OPTION_DELIVERY_STATUS, ///< the delivery info which is a feedback from app level
ENCODER_LTR_RECOVERY_REQUEST,
ENCODER_LTR_MARKING_FEEDBACK,
ENCOCER_LTR_MARKING_PERIOD,
ENCODER_OPTION_LTR,
ENCODER_LTR_MARKING_PERIOD,
ENCODER_OPTION_LTR, ///< 0:disable LTR;larger than 0 enable LTR; LTR number is fixed to be 2 in current encoder
ENCODER_OPTION_COMPLEXITY,
ENCODER_OPTION_ENABLE_SSEI, //enable SSEI: true--enable ssei; false--disable ssei
ENCODER_OPTION_ENABLE_PREFIX_NAL_ADDING, //enable prefix: true--enable prefix; false--disable prefix
ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, //enable pSps/pPps id addition: true--enable pSps/pPps id; false--disable pSps/pPps id addistion
ENCODER_OPTION_ENABLE_SSEI, ///< enable SSEI: true--enable ssei; false--disable ssei
ENCODER_OPTION_ENABLE_PREFIX_NAL_ADDING, ///< enable prefix: true--enable prefix; false--disable prefix
ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, ///< enable pSps/pPps id addition: true--enable pSps/pPps id; false--disable pSps/pPps id addistion
ENCODER_OPTION_CURRENT_PATH,
ENCODER_OPTION_DUMP_FILE,
ENCODER_OPTION_TRACE_LEVEL,
ENCODER_OPTION_TRACE_CALLBACK, // a void (*)(void* context, int level, const char* message) function which receives log messages
ENCODER_OPTION_TRACE_CALLBACK_CONTEXT,
ENCODER_OPTION_DUMP_FILE, ///< dump layer reconstruct frame to a specified file
ENCODER_OPTION_TRACE_LEVEL, ///< trace info based on the trace level
ENCODER_OPTION_TRACE_CALLBACK, ///< a void (*)(void* context, int level, const char* message) function which receives log messages
ENCODER_OPTION_TRACE_CALLBACK_CONTEXT, ///< context info of trace callback
ENCODER_OPTION_GET_STATISTICS, ///< read only
ENCODER_OPTION_STATISTICS_LOG_INTERVAL, ///< log interval in millisecond
ENCODER_OPTION_IS_LOSSLESS_LINK, ///< advanced algorithmetic settings
ENCODER_OPTION_BITS_VARY_PERCENTAGE ///< bit vary percentage
} ENCODER_OPTION;
/* Option types introduced in decoder application */
/**
* @brief Option types introduced in decoder application
*/
typedef enum {
DECODER_OPTION_DATAFORMAT = 0, /* Set color space of decoding output frame */
DECODER_OPTION_END_OF_STREAM, /* Indicate bitstream of the final frame to be decoded */
DECODER_OPTION_VCL_NAL, //feedback whether or not have VCL NAL in current AU for application layer
DECODER_OPTION_TEMPORAL_ID, //feedback temporal id for application layer
DECODER_OPTION_FRAME_NUM, //feedback current decoded frame number
DECODER_OPTION_IDR_PIC_ID, // feedback current frame belong to which IDR period
DECODER_OPTION_LTR_MARKING_FLAG, // feedback wether current frame mark a LTR
DECODER_OPTION_LTR_MARKED_FRAME_NUM, // feedback frame num marked by current Frame
DECODER_OPTION_ERROR_CON_IDC, //not finished yet, indicate decoder error concealment status, in progress
DECODER_OPTION_DATAFORMAT = 0, ///< color format, now supports 23 only (I420)
DECODER_OPTION_END_OF_STREAM, ///< end of stream flag
DECODER_OPTION_VCL_NAL, ///< feedback whether or not have VCL NAL in current AU for application layer
DECODER_OPTION_TEMPORAL_ID, ///< feedback temporal id for application layer
DECODER_OPTION_FRAME_NUM, ///< feedback current decoded frame number
DECODER_OPTION_IDR_PIC_ID, ///< feedback current frame belong to which IDR period
DECODER_OPTION_LTR_MARKING_FLAG, ///< feedback wether current frame mark a LTR
DECODER_OPTION_LTR_MARKED_FRAME_NUM, ///< feedback frame num marked by current Frame
DECODER_OPTION_ERROR_CON_IDC, ///< not finished yet, indicate decoder error concealment status, in progress
DECODER_OPTION_TRACE_LEVEL,
DECODER_OPTION_TRACE_CALLBACK, // a void (*)(void* context, int level, const char* message) function which receives log messages
DECODER_OPTION_TRACE_CALLBACK_CONTEXT,
DECODER_OPTION_TRACE_CALLBACK, ///< a void (*)(void* context, int level, const char* message) function which receives log messages
DECODER_OPTION_TRACE_CALLBACK_CONTEXT,///< context info of trace callbac
DECODER_OPTION_GET_STATISTICS
} DECODER_OPTION;
//enuerate the types of error concealment methods
/**
* @brief Enumerate the type of error concealment methods
*/
typedef enum {
ERROR_CON_DISABLE = 0,
ERROR_CON_FRAME_COPY,
ERROR_CON_SLICE_COPY,
ERROR_CON_FRAME_COPY_CROSS_IDR,
ERROR_CON_SLICE_COPY_CROSS_IDR,
ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE,
ERROR_CON_SLICE_MV_COPY_CROSS_IDR,
ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE
} ERROR_CON_IDC;
typedef enum { //feedback that whether or not have VCL NAL in current AU
/**
* @brief Feedback that whether or not have VCL NAL in current AU
*/
typedef enum {
FEEDBACK_NON_VCL_NAL = 0,
FEEDBACK_VCL_NAL,
FEEDBACK_UNKNOWN_NAL
} FEEDBACK_VCL_NAL_IN_AU;
/* Type of layer being encoded */
/**
* @brief Type of layer being encoded
*/
typedef enum {
NON_VIDEO_CODING_LAYER = 0,
VIDEO_CODING_LAYER = 1
} LAYER_TYPE;
/**
* @brief Spatial layer num
*/
typedef enum {
SPATIAL_LAYER_0 = 0,
SPATIAL_LAYER_1 = 1,
SPATIAL_LAYER_2 = 2,
SPATIAL_LAYER_3 = 3,
SPATIAL_LAYER_ALL = 4,
SPATIAL_LAYER_ALL = 4
} LAYER_NUM;
//enumerate the type of video bitstream which is provided to decoder
/**
* @brief Enumerate the type of video bitstream which is provided to decoder
*/
typedef enum {
VIDEO_BITSTREAM_AVC = 0,
VIDEO_BITSTREAM_SVC = 1,
VIDEO_BITSTREAM_DEFAULT = VIDEO_BITSTREAM_SVC,
VIDEO_BITSTREAM_DEFAULT = VIDEO_BITSTREAM_SVC
} VIDEO_BITSTREAM_TYPE;
/**
* @brief Enumerate the type of key frame request
*/
typedef enum {
NO_RECOVERY_REQUSET = 0,
LTR_RECOVERY_REQUEST = 1,
IDR_RECOVERY_REQUEST = 2,
NO_LTR_MARKING_FEEDBACK = 3,
LTR_MARKING_SUCCESS = 4,
LTR_MARKING_FAILED = 5,
LTR_MARKING_FAILED = 5
} KEY_FRAME_REQUEST_TYPE;
/**
* @brief Structure for LTR recover request
*/
typedef struct {
unsigned int uiFeedbackType; //IDR request or LTR recovery request
unsigned int uiIDRPicId; // distinguish request from different IDR
int iLastCorrectFrameNum;
int iCurrentFrameNum; //specify current decoder frame_num.
unsigned int uiFeedbackType; ///< IDR request or LTR recovery request
unsigned int uiIDRPicId; ///< distinguish request from different IDR
int iLastCorrectFrameNum;
int iCurrentFrameNum; ///< specify current decoder frame_num.
} SLTRRecoverRequest;
/**
* @brief Structure for LTR marking feedback
*/
typedef struct {
unsigned int uiFeedbackType; //mark failed or successful
unsigned int uiIDRPicId; // distinguish request from different IDR
int iLTRFrameNum; //specify current decoder frame_num
unsigned int uiFeedbackType; ///< mark failed or successful
unsigned int uiIDRPicId; ///< distinguish request from different IDR
int iLTRFrameNum; ///< specify current decoder frame_num
} SLTRMarkingFeedback;
/**
* @brief Structure for LTR configuration
*/
typedef struct {
bool bEnableLongTermReference; ///< 1: on, 0: off
int iLTRRefNum; ///< TODO: not supported to set it arbitrary yet
} SLTRConfig;
/**
* @brief Structure for slice argument
*/
typedef struct {
unsigned int
uiSliceMbNum[MAX_SLICES_NUM_TMP]; //here we use a tmp fixed value since MAX_SLICES_NUM is not defined here and its definition may be changed;
unsigned int uiSliceNum;
unsigned int uiSliceSizeConstraint;
} SSliceArgument;//not all the elements in this argument will be used, how it will be used depends on uiSliceMode; see below
uiSliceMbNum[MAX_SLICES_NUM_TMP]; ///< only used when uiSliceMode=2;here we use a tmp fixed value since MAX_SLICES_NUM is not defined here and its definition may be changed;
unsigned int uiSliceNum; ///< only used when uiSliceMode=1
unsigned int uiSliceSizeConstraint; ///< only used when uiSliceMode=4
} SSliceArgument; ///< not all the elements in this argument will be used, how it will be used depends on uiSliceMode; please refer to SliceModeEnum
/**
* @brief Enumerate the type of slice mode
*/
typedef enum {
SM_SINGLE_SLICE = 0, // | SliceNum==1
SM_FIXEDSLCNUM_SLICE = 1, // | according to SliceNum | Enabled dynamic slicing for multi-thread
SM_RASTER_SLICE = 2, // | according to SlicesAssign | Need input of MB numbers each slice. In addition, if other constraint in SSliceArgument is presented, need to follow the constraints. Typically if MB num and slice size are both constrained, re-encoding may be involved.
SM_ROWMB_SLICE = 3, // | according to PictureMBHeight | Typical of single row of mbs each slice?+ slice size constraint which including re-encoding
SM_DYN_SLICE = 4, // | according to SliceSize | Dynamic slicing (have no idea about slice_nums until encoding current frame)
SM_AUTO_SLICE = 5, // | according to thread number
SM_SINGLE_SLICE = 0, ///< | SliceNum==1
SM_FIXEDSLCNUM_SLICE = 1, ///< | according to SliceNum | enabled dynamic slicing for multi-thread
SM_RASTER_SLICE = 2, ///< | according to SlicesAssign | need input of MB numbers each slice. In addition, if other constraint in SSliceArgument is presented, need to follow the constraints. Typically if MB num and slice size are both constrained, re-encoding may be involved.
SM_ROWMB_SLICE = 3, ///< | according to PictureMBHeight | typical of single row of mbs each slice + slice size constraint which including re-encoding
SM_DYN_SLICE = 4, ///< | according to SliceSize | dynamic slicing (have no idea about slice_nums until encoding current frame)
SM_AUTO_SLICE = 5, ///< | according to thread number
SM_RESERVED = 6
} SliceModeEnum;
/**
* @brief Enumerate the type of rate control mode
*/
typedef enum {
RC_QUALITY_MODE = 0, //Quality mode
RC_BITRATE_MODE = 1, //Bitrate mode
RC_LOW_BW_MODE = 2, //bitrate limited mode
RC_OFF_MODE = -1, // rate control off mode
RC_QUALITY_MODE = 0, ///< quality mode
RC_BITRATE_MODE = 1, ///< bitrate mode
RC_BUFFERBASED_MODE = 2, ///< no bitrate control,only using buffer status,adjust the video quality
RC_OFF_MODE = -1 ///< rate control off mode
} RC_MODES;
/**
* @brief Enumerate the type of profile id
*/
typedef enum {
PRO_UNKNOWN = 0,
PRO_UNKNOWN = 0,
PRO_BASELINE = 66,
PRO_MAIN = 77,
PRO_EXTENDED = 88,
PRO_HIGH = 100,
PRO_HIGH10 = 110,
PRO_HIGH422 = 122,
PRO_HIGH444 = 144,
PRO_HIGH10 = 110,
PRO_HIGH422 = 122,
PRO_HIGH444 = 144,
PRO_CAVLC444 = 244,
PRO_SCALABLE_BASELINE = 83,
PRO_SCALABLE_HIGH = 86,
PRO_SCALABLE_HIGH = 86
} EProfileIdc;
/**
* @brief Enumerate the type of level id
*/
typedef enum {
LEVEL_UNKNOWN,
LEVEL_1_0,
@@ -236,130 +329,159 @@ typedef enum {
LEVEL_5_2
} ELevelIdc;
/**
* @brief Enumerate the type of wels log
*/
enum {
WELS_LOG_QUIET = 0x00, // Quiet mode
WELS_LOG_ERROR = 1 << 0, // Error log iLevel
WELS_LOG_WARNING = 1 << 1, // Warning log iLevel
WELS_LOG_INFO = 1 << 2, // Information log iLevel
WELS_LOG_DEBUG = 1 << 3, // Debug log, critical algo log
WELS_LOG_DETAIL = 1 << 4, // per packet/frame log
WELS_LOG_RESV = 1 << 5, // Resversed log iLevel
WELS_LOG_QUIET = 0x00, ///< quiet mode
WELS_LOG_ERROR = 1 << 0, ///< error log iLevel
WELS_LOG_WARNING = 1 << 1, ///< Warning log iLevel
WELS_LOG_INFO = 1 << 2, ///< information log iLevel
WELS_LOG_DEBUG = 1 << 3, ///< debug log, critical algo log
WELS_LOG_DETAIL = 1 << 4, ///< per packet/frame log
WELS_LOG_RESV = 1 << 5, ///< resversed log iLevel
WELS_LOG_LEVEL_COUNT = 6,
WELS_LOG_DEFAULT = WELS_LOG_DEBUG // Default log iLevel in Wels codec
WELS_LOG_DEFAULT = WELS_LOG_WARNING ///< default log iLevel in Wels codec
};
/**
* @brief Structure for slice configuration
*/
typedef struct {
SliceModeEnum uiSliceMode; //by default, uiSliceMode will be SM_SINGLE_SLICE
SliceModeEnum uiSliceMode; ///< by default, uiSliceMode will be SM_SINGLE_SLICE
SSliceArgument sSliceArgument;
} SSliceConfig;
/**
* @brief Structure for spatial layer configuration
*/
typedef struct {
int iVideoWidth; // video size in cx specified for a layer
int iVideoHeight; // video size in cy specified for a layer
float fFrameRate; // frame rate specified for a layer
int iSpatialBitrate; // target bitrate for a spatial layer
int iMaxSpatialBitrate;
EProfileIdc uiProfileIdc; // value of profile IDC (PRO_UNKNOWN for auto-detection)
ELevelIdc uiLevelIdc;
int iDLayerQp;
int iVideoWidth; ///< width of picture in luminance samples of a layer
int iVideoHeight; ///< height of picture in luminance samples of a layer
float fFrameRate; ///< frame rate specified for a layer
int iSpatialBitrate; ///< target bitrate for a spatial layer
int iMaxSpatialBitrate; ///< maximum bitrate for a spatial layer
EProfileIdc uiProfileIdc; ///< value of profile IDC (PRO_UNKNOWN for auto-detection)
ELevelIdc uiLevelIdc; ///< value of profile IDC (0 for auto-detection)
int iDLayerQp; ///< value of level IDC (0 for auto-detection)
SSliceConfig sSliceCfg;
SSliceConfig sSliceCfg; ///< slice configuration for a layer
} SSpatialLayerConfig;
/**
* @brief Encoder usage type
*/
typedef enum {
CAMERA_VIDEO_REAL_TIME, //camera video signal
SCREEN_CONTENT_REAL_TIME,//screen content signal
CAMERA_VIDEO_REAL_TIME, ///< camera video signal
SCREEN_CONTENT_REAL_TIME ///< screen content signal
} EUsageType;
/**
* @brief Enumulate the complexity mode
*/
typedef enum {
LOW_COMPLEXITY, ///< the lowest compleixty,the fastest speed,
MEDIUM_COMPLEXITY, ///< medium complexity, medium speed,medium quality
HIGH_COMPLEXITY ///< high complexity, lowest speed, high quality
} ECOMPLEXITY_MODE;
// TODO: Refine the parameters definition.
// SVC Encoding Parameters
/**
* @brief SVC Encoding Parameters
*/
typedef struct TagEncParamBase {
EUsageType
iUsageType; //application type;// CAMERA_VIDEO_REAL_TIME: //camera video signal; SCREEN_CONTENT_REAL_TIME: screen content signal;
int iInputCsp; // color space of input sequence
iUsageType; ///< application type;1.CAMERA_VIDEO_REAL_TIME:camera video signal; 2.SCREEN_CONTENT_REAL_TIME:screen content signal;
int iPicWidth; // width of picture in samples
int iPicHeight; // height of picture in samples
int iTargetBitrate; // target bitrate desired
RC_MODES iRCMode; // RC mode
float fMaxFrameRate; // input maximal frame rate
int iPicWidth; ///< width of picture in luminance samples (the maximum of all layers if multiple spatial layers presents)
int iPicHeight; ///< height of picture in luminance samples((the maximum of all layers if multiple spatial layers presents)
int iTargetBitrate; ///< target bitrate desired
RC_MODES iRCMode; ///< rate control mode
float fMaxFrameRate; ///< maximal input frame rate
} SEncParamBase, *PEncParamBase;
/**
* @brief SVC Encoding Parameters extention
*/
typedef struct TagEncParamExt {
EUsageType
iUsageType; //application type;// CAMERA_VIDEO_REAL_TIME: //camera video signal; SCREEN_CONTENT_REAL_TIME: screen content signal;
int iInputCsp; // color space of input sequence
iUsageType; ///< application type;1.CAMERA_VIDEO_REAL_TIME:camera video signal;2.SCREEN_CONTENT_REAL_TIME:screen content signal;
int iPicWidth; // width of picture in samples
int iPicHeight; // height of picture in samples
int iTargetBitrate; // target bitrate desired
RC_MODES iRCMode; // RC mode
float fMaxFrameRate; // input maximal frame rate
int iPicWidth; ///< width of picture in luminance samples (the maximum of all layers if multiple spatial layers presents)
int iPicHeight; ///< height of picture in luminance samples((the maximum of all layers if multiple spatial layers presents)
int iTargetBitrate; ///< target bitrate desired
RC_MODES iRCMode; ///< rate control mode
float fMaxFrameRate; ///< maximal input frame rate
int iTemporalLayerNum; // layer number at temporal level
int iSpatialLayerNum; // layer number at spatial level
int iTemporalLayerNum; ///< temporal layer number, max temporal layer = 4
int iSpatialLayerNum; ///< spatial layer number,1<= iSpatialLayerNum <= MAX_SPATIAL_LAYER_NUM, MAX_SPATIAL_LAYER_NUM = 4
SSpatialLayerConfig sSpatialLayers[MAX_SPATIAL_LAYER_NUM];
unsigned int uiIntraPeriod; // period of Intra frame
int iNumRefFrame; // number of reference frame used
unsigned int uiFrameToBeCoded; // frame to be encoded (at input frame rate)
bool bEnableSpsPpsIdAddition;
bool bPrefixNalAddingCtrl;
bool bEnableSSEI;
int iPaddingFlag; // 0:disable padding;1:padding
int iEntropyCodingModeFlag;
ECOMPLEXITY_MODE iComplexityMode;
unsigned int uiIntraPeriod; ///< period of Intra frame
int iNumRefFrame; ///< number of reference frame used
bool bEnableSpsPpsIdAddition; ///< false:not adjust ID in SPS/PPS; true: adjust ID in SPS/PPS
bool bPrefixNalAddingCtrl; ///< false:not use Prefix NAL; true: use Prefix NAL
bool bEnableSSEI; ///< false:not use SSEI; true: use SSEI
int iPaddingFlag; ///< 0:disable padding;1:padding
int iEntropyCodingModeFlag; ///< 0:CAVLC 1:CABAC.
/* rc control */
bool bEnableFrameSkip; // allow skipping frames to keep the bitrate within limits
int iMaxBitrate; // max bitrate desired
int iMaxQp;
int iMinQp;
unsigned int uiMaxNalSize;
bool bEnableFrameSkip; ///< False: don't skip frame even if VBV buffer overflow.True: allow skipping frames to keep the bitrate within limits
int iMaxBitrate; ///< the maximum bitrate
int iMaxQp; ///< the maximum QP encoder supports
int iMinQp; ///< the minmum QP encoder supports
unsigned int uiMaxNalSize; ///< the maximum NAL size. This value should be not 0 for dynamic slice mode
/*LTR settings*/
bool bEnableLongTermReference; // 0: on, 1: off
int iLTRRefNum;
unsigned int iLtrMarkPeriod;
bool bEnableLongTermReference; ///< 1: on, 0: off
int iLTRRefNum; ///< the number of LTR(long term reference),TODO: not supported to set it arbitrary yet
unsigned int iLtrMarkPeriod; ///< the LTR marked period that is used in feedback.
/* multi-thread settings*/
unsigned short
iMultipleThreadIdc; // 1 # 0: auto(dynamic imp. internal encoder); 1: multiple threads imp. disabled; > 1: count number of threads;
iMultipleThreadIdc; ///< 1 # 0: auto(dynamic imp. internal encoder); 1: multiple threads imp. disabled; lager than 1: count number of threads;
/* Deblocking loop filter */
int iLoopFilterDisableIdc; // 0: on, 1: off, 2: on except for slice boundaries
int iLoopFilterAlphaC0Offset;// AlphaOffset: valid range [-6, 6], default 0
int iLoopFilterBetaOffset; // BetaOffset: valid range [-6, 6], default 0
int iLoopFilterDisableIdc; ///< 0: on, 1: off, 2: on except for slice boundaries
int iLoopFilterAlphaC0Offset; ///< AlphaOffset: valid range [-6, 6], default 0
int iLoopFilterBetaOffset; ///< BetaOffset: valid range [-6, 6], default 0
/*pre-processing feature*/
bool bEnableDenoise; // denoise control
bool bEnableBackgroundDetection;// background detection control //VAA_BACKGROUND_DETECTION //BGD cmd
bool bEnableAdaptiveQuant; // adaptive quantization control
bool bEnableFrameCroppingFlag;// enable frame cropping flag: TRUE always in application
bool bEnableDenoise; ///< denoise control
bool bEnableBackgroundDetection; ///< background detection control //VAA_BACKGROUND_DETECTION //BGD cmd
bool bEnableAdaptiveQuant; ///< adaptive quantization control
bool bEnableFrameCroppingFlag; ///< enable frame cropping flag: TRUE always in application
bool bEnableSceneChangeDetect;
bool bIsLosslessLink; ///< LTR advanced setting
} SEncParamExt;
//Define a new struct to show the property of video bitstream.
/**
* @brief Define a new struct to show the property of video bitstream.
*/
typedef struct {
unsigned int size; //size of the struct
VIDEO_BITSTREAM_TYPE eVideoBsType;
unsigned int size; ///< size of the struct
VIDEO_BITSTREAM_TYPE eVideoBsType; ///< video stream type (AVC/SVC)
} SVideoProperty;
/* SVC Decoding Parameters, reserved here and potential applicable in the future */
/**
* @brief SVC Decoding Parameters, reserved here and potential applicable in the future
*/
typedef struct TagSVCDecodingParam {
char* pFileNameRestructed; // File name of restructed frame used for PSNR calculation based debug
char* pFileNameRestructed; ///< file name of reconstructed frame used for PSNR calculation based debug
int iOutputColorFormat; // color space format to be outputed, EVideoFormatType specified in codec_def.h
unsigned int uiCpuLoad; // CPU load
unsigned char uiTargetDqLayer; // Setting target dq layer id
EVideoFormatType eOutputColorFormat; ///< color space format to be outputed, EVideoFormatType specified in codec_def.h
unsigned int uiCpuLoad; ///< CPU load
unsigned char uiTargetDqLayer; ///< setting target dq layer id
unsigned char uiEcActiveFlag; // Whether active error concealment feature in decoder
ERROR_CON_IDC eEcActiveIdc; ///< whether active error concealment feature in decoder
bool bParseOnly; ///< decoder for parse only, no reconstruction. When it is true, SPS/PPS size should not exceed SPS_PPS_BS_SIZE (128). Otherwise, it will return error info
SVideoProperty sVideoProperty;
SVideoProperty sVideoProperty; ///< video stream property
} SDecodingParam, *PDecodingParam;
/* Bitstream inforamtion of a layer being encoded */
/**
* @brief Bitstream inforamtion of a layer being encoded
*/
typedef struct {
unsigned char uiTemporalId;
unsigned char uiSpatialId;
@@ -367,57 +489,160 @@ typedef struct {
unsigned char uiLayerType;
int iNalCount; // Count number of NAL coded already
int* pNalLengthInByte; // Length of NAL size in byte from 0 to iNalCount-1
unsigned char* pBsBuf; // Buffer of bitstream contained
int iNalCount; ///< count number of NAL coded already
int* pNalLengthInByte; ///< length of NAL size in byte from 0 to iNalCount-1
unsigned char* pBsBuf; ///< buffer of bitstream contained
} SLayerBSInfo, *PLayerBSInfo;
/**
* @brief Frame bit stream info
*/
typedef struct {
int iTemporalId; // Temporal ID
//The sub sequence layers are ordered hierarchically based on their dependency on each other so that any picture in a layer shall not be
//predicted from any picture on any higher layer.
int iSubSeqId; //refer to D.2.11 Sub-sequence information SEI message semantics
int iTemporalId; ///< temporal ID
/**
* The sub sequence layers are ordered hierarchically based on their dependency on each other so that any picture in a layer shall not be
* predicted from any picture on any higher layer.
*/
int iSubSeqId; ///< refer to D.2.11 Sub-sequence information SEI message semantics
int iLayerNum;
SLayerBSInfo sLayerInfo[MAX_LAYER_NUM_OF_FRAME];
EVideoFrameType eFrameType;
int iFrameSizeInBytes;
long long uiTimeStamp;
} SFrameBSInfo, *PFrameBSInfo;
/**
* @brief Structure for source picture
*/
typedef struct Source_Picture_s {
int iColorFormat; // color space type
int iStride[4]; // stride for each plane pData
unsigned char* pData[4]; // plane pData
int iPicWidth; // luma picture width in x coordinate
int iPicHeight; // luma picture height in y coordinate
int iColorFormat; ///< color space type
int iStride[4]; ///< stride for each plane pData
unsigned char* pData[4]; ///< plane pData
int iPicWidth; ///< luma picture width in x coordinate
int iPicHeight; ///< luma picture height in y coordinate
long long uiTimeStamp;
} SSourcePicture;
/**
* @brief Structure for bit rate info
*/
typedef struct TagBitrateInfo {
LAYER_NUM iLayer;
int iBitrate; //the maximum bitrate
int iBitrate; ///< the maximum bitrate
} SBitrateInfo;
/**
* @brief Structure for dump layer info
*/
typedef struct TagDumpLayer {
int iLayer;
char* pFileName;
} SDumpLayer;
/**
* @brief Structure for profile info in layer
*
*/
typedef struct TagProfileInfo {
int iLayer;
EProfileIdc uiProfileIdc; //the profile info
EProfileIdc uiProfileIdc; ///< the profile info
} SProfileInfo;
/**
* @brief Structure for level info in layer
*
*/
typedef struct TagLevelInfo {
int iLayer;
ELevelIdc uiLevelIdc; //the level info
ELevelIdc uiLevelIdc; ///< the level info
} SLevelInfo;
/**
* @brief Structure for dilivery status
*
*/
typedef struct TagDeliveryStatus {
int iDropNum; //the number of video frames that are dropped continuously before delivery to encoder, which is used by screen content.
int iDropFrameType; // the frame type that is dropped
int iDropFrameSize; // the frame size that is dropped
bool bDeliveryFlag; ///< 0: the previous frame isn't delivered,1: the previous frame is delivered
int iDropFrameType; ///< the frame type that is dropped; reserved
int iDropFrameSize; ///< the frame size that is dropped; reserved
} SDeliveryStatus;
/**
* @brief The capability of decoder, for SDP negotiation
*/
typedef struct TagDecoderCapability {
int iProfileIdc; ///< profile_idc
int iProfileIop; ///< profile-iop
int iLevelIdc; ///< level_idc
int iMaxMbps; ///< max-mbps
int iMaxFs; ///< max-fs
int iMaxCpb; ///< max-cpb
int iMaxDpb; ///< max-dpb
int iMaxBr; ///< max-br
bool bRedPicCap; ///< redundant-pic-cap
} SDecoderCapability;
/**
* @brief to do
*/
typedef struct TagParserBsInfo {
int iNalNum; ///< total NAL number in current AU
int iNalLenInByte [MAX_NAL_UNITS_IN_LAYER]; ///< each nal length
unsigned char* pDstBuff; ///< outputted dst buffer for parsed bitstream
int iSpsWidthInPixel; ///< required SPS width info
int iSpsHeightInPixel; ///< required SPS height info
unsigned long long uiInBsTimeStamp; ///< input BS timestamp
unsigned long long uiOutBsTimeStamp; ///< output BS timestamp
} SParserBsInfo, *PParserBsInfo;
/**
* @brief Structure for encoder statistics
*/
typedef struct TagVideoEncoderStatistics {
unsigned int uiWidth; ///< the width of encoded frame
unsigned int uiHeight; ///< the height of encoded frame
//following standard, will be 16x aligned, if there are multiple spatial, this is of the highest
float fAverageFrameSpeedInMs; ///< average_Encoding_Time
// rate control related
float fAverageFrameRate; ///< the average frame rate in, calculate since encoding starts, supposed that the input timestamp is in unit of ms
float fLatestFrameRate; ///< the frame rate in, in the last second, supposed that the input timestamp is in unit of ms (? useful for checking BR, but is it easy to calculate?
unsigned int uiBitRate; ///< sendrate in Bits per second, calculated within the set time-window
unsigned int uiAverageFrameQP; ///< the average QP of last encoded frame
unsigned int uiInputFrameCount; ///< number of frames
unsigned int uiSkippedFrameCount; ///< number of frames
unsigned int uiResolutionChangeTimes; ///< uiResolutionChangeTimes
unsigned int uiIDRReqNum; ///< number of IDR requests
unsigned int uiIDRSentNum; ///< number of actual IDRs sent
unsigned int uiLTRSentNum; ///< number of LTR sent/marked
} SEncoderStatistics; // in building, coming soon
/**
* @brief Structure for decoder statistics
*/
typedef struct TagVideoDecoderStatistics {
unsigned int uiWidth; ///< the width of encode/decode frame
unsigned int uiHeight; ///< the height of encode/decode frame
float fAverageFrameSpeedInMs; ///< average_Decoding_Time
float fActualAverageFrameSpeedInMs; ///< actual average_Decoding_Time, including freezing pictures
unsigned int uiDecodedFrameCount; ///< number of frames
unsigned int uiResolutionChangeTimes; ///< uiResolutionChangeTimes
unsigned int uiIDRCorrectNum; ///< number of correct IDR received
//EC on related
unsigned int
uiAvgEcRatio; ///< when EC is on, the average ratio of total EC areas, can be an indicator of reconstruction quality
unsigned int
uiAvgEcPropRatio; ///< when EC is on, the rough average ratio of propogate EC areas, can be an indicator of reconstruction quality
unsigned int uiEcIDRNum; ///< number of actual unintegrity IDR or not received but eced
unsigned int uiEcFrameNum; ///<
unsigned int uiIDRLostNum; ///< number of whole lost IDR
unsigned int uiFreezingIDRNum; ///< number of freezing IDR with error (partly received), under resolution change
unsigned int uiFreezingNonIDRNum; ///< number of freezing non-IDR with error
int iAvgLumaQp; ///< average luma QP. default: -1, no correct frame outputted
} SDecoderStatistics; // in building, coming soon
#endif//WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__

View File

@@ -33,9 +33,15 @@
#ifndef WELS_VIDEO_CODEC_DEFINITION_H__
#define WELS_VIDEO_CODEC_DEFINITION_H__
/**
* @file codec_def.h
*/
/**
* @brief Enumerate the type of video format
*/
typedef enum {
/*rgb color formats*/
videoFormatRGB = 1,
videoFormatRGB = 1, ///< rgb color formats
videoFormatRGBA = 2,
videoFormatRGB555 = 3,
videoFormatRGB565 = 4,
@@ -44,56 +50,66 @@ typedef enum {
videoFormatABGR = 7,
videoFormatARGB = 8,
/*yuv color formats*/
videoFormatYUY2 = 20,
videoFormatYUY2 = 20, ///< yuv color formats
videoFormatYVYU = 21,
videoFormatUYVY = 22,
videoFormatI420 = 23, //same as IYUV
videoFormatI420 = 23, ///< the same as IYUV
videoFormatYV12 = 24,
videoFormatInternal = 25, // Only Used for SVC decoder testbed
videoFormatInternal = 25, ///< only used in SVC decoder testbed
videoFormatNV12 = 26, // new format for output by DXVA decoding
videoFormatNV12 = 26, ///< new format for output by DXVA decoding
videoFormatVFlip = 0x80000000
} EVideoFormatType;
/**
* @brief Enumerate video frame type
*/
typedef enum {
videoFrameTypeInvalid, /* Encoder not ready or parameters are invalidate */
videoFrameTypeIDR, /* This type is only available for H264 if this frame is key frame, then return this type */
videoFrameTypeI, /* I frame type */
videoFrameTypeP, /* P frame type */
videoFrameTypeSkip, /* Skip the frame based encoder kernel */
videoFrameTypeIPMixed, /* Frame type introduced I and P slices are mixing */
videoFrameTypeInvalid, ///< encoder not ready or parameters are invalidate
videoFrameTypeIDR, ///< IDR frame in H.264
videoFrameTypeI, ///< I frame type
videoFrameTypeP, ///< P frame type
videoFrameTypeSkip, ///< skip the frame based encoder kernel
videoFrameTypeIPMixed ///< a frame where I and P slices are mixing, not supported yet
} EVideoFrameType;
/**
* @brief Enumerate return type
*/
typedef enum {
cmResultSuccess,
cmInitParaError, /*Parameters are invalid */
cmResultSuccess, ///< successful
cmInitParaError, ///< parameters are invalid
cmUnkonwReason,
cmMallocMemeError, /*Malloc a memory error*/
cmInitExpected, /*Initial action is expected*/
cmUnsupportedData,
cmMallocMemeError, ///< malloc a memory error
cmInitExpected, ///< initial action is expected
cmUnsupportedData
} CM_RETURN;
/* nal unit type */
/**
* @brief Enumulate the nal unit type
*/
enum ENalUnitType {
NAL_UNKNOWN = 0,
NAL_SLICE = 1,
NAL_UNKNOWN = 0,
NAL_SLICE = 1,
NAL_SLICE_DPA = 2,
NAL_SLICE_DPB = 3,
NAL_SLICE_DPC = 4,
NAL_SLICE_IDR = 5, /* ref_idc != 0 */
NAL_SEI = 6, /* ref_idc == 0 */
NAL_SLICE_IDR = 5, ///< ref_idc != 0
NAL_SEI = 6, ///< ref_idc == 0
NAL_SPS = 7,
NAL_PPS = 8
/* ref_idc == 0 for 6,9,10,11,12 */
///< ref_idc == 0 for 6,9,10,11,12
};
/* NRI: eNalRefIdc */
/**
* @brief NRI: eNalRefIdc
*/
enum ENalPriority {
NAL_PRIORITY_DISPOSABLE = 0,
NAL_PRIORITY_LOW = 1,
NAL_PRIORITY_HIGH = 2,
NAL_PRIORITY_HIGHEST = 3,
NAL_PRIORITY_HIGHEST = 3
};
#define IS_PARAMETER_SET_NAL(eNalRefIdc, eNalType) \
@@ -107,82 +123,80 @@ enum ENalPriority {
/* Error Tools definition */
typedef unsigned short ERR_TOOL;
/**
@brief to do
*/
enum {
ET_NONE = 0x00, // NONE Error Tools
ET_IP_SCALE = 0x01, // IP Scalable
ET_FMO = 0x02, // Flexible Macroblock Ordering
ET_IR_R1 = 0x04, // Intra Refresh in predifined 2% MB
ET_IR_R2 = 0x08, // Intra Refresh in predifined 5% MB
ET_IR_R3 = 0x10, // Intra Refresh in predifined 10% MB
ET_FEC_HALF = 0x20, // Forward Error Correction in 50% redundency mode
ET_FEC_FULL = 0x40, // Forward Error Correction in 100% redundency mode
ET_RFS = 0x80, // Reference Frame Selection
ET_NONE = 0x00, ///< NONE Error Tools
ET_IP_SCALE = 0x01, ///< IP Scalable
ET_FMO = 0x02, ///< Flexible Macroblock Ordering
ET_IR_R1 = 0x04, ///< Intra Refresh in predifined 2% MB
ET_IR_R2 = 0x08, ///< Intra Refresh in predifined 5% MB
ET_IR_R3 = 0x10, ///< Intra Refresh in predifined 10% MB
ET_FEC_HALF = 0x20, ///< Forward Error Correction in 50% redundency mode
ET_FEC_FULL = 0x40, ///< Forward Error Correction in 100% redundency mode
ET_RFS = 0x80 ///< Reference Frame Selection
};
/* information of coded Slice(=NAL)(s) */
/**
* @brief Information of coded Slice(=NAL)(s)
*/
typedef struct SliceInformation {
unsigned char* pBufferOfSlices; // base buffer of coded slice(s)
int iCodedSliceCount; // number of coded slices
unsigned int* pLengthOfSlices; // array of slices length accordingly by number of slice
int iFecType; // FEC type[0, 50%FEC, 100%FEC]
unsigned char uiSliceIdx; // index of slice in frame [FMO: 0,..,uiSliceCount-1; No FMO: 0]
unsigned char uiSliceCount; // count number of slice in frame [FMO: 2-8; No FMO: 1]
char iFrameIndex; // index of frame[-1, .., idr_interval-1]
unsigned char uiNalRefIdc; // NRI, priority level of slice(NAL)
unsigned char uiNalType; // NAL type
unsigned char* pBufferOfSlices; ///< base buffer of coded slice(s)
int iCodedSliceCount; ///< number of coded slices
unsigned int* pLengthOfSlices; ///< array of slices length accordingly by number of slice
int iFecType; ///< FEC type[0, 50%FEC, 100%FEC]
unsigned char uiSliceIdx; ///< index of slice in frame [FMO: 0,..,uiSliceCount-1; No FMO: 0]
unsigned char uiSliceCount; ///< count number of slice in frame [FMO: 2-8; No FMO: 1]
char iFrameIndex; ///< index of frame[-1, .., idr_interval-1]
unsigned char uiNalRefIdc; ///< NRI, priority level of slice(NAL)
unsigned char uiNalType; ///< NAL type
unsigned char
uiContainingFinalNal; // whether final NAL is involved in buffer of coded slices, flag used in Pause feature in T27
uiContainingFinalNal; ///< whether final NAL is involved in buffer of coded slices, flag used in Pause feature in T27
} SliceInfo, *PSliceInfo;
#define CIF_WIDTH 352
#define CIF_HEIGHT 288
#define QVGA_WIDTH 320
#define QVGA_HEIGHT 240
#define QCIF_WIDTH 176
#define QCIF_HEIGHT 144
#define SQCIF_WIDTH 128
#define SQCIF_HEIGHT 96
/* thresholds of the initial, maximal and minimal rate */
/**
* @brief thresholds of the initial, maximal and minimal rate
*/
typedef struct {
int iWidth; // frame width
int iHeight; // frame height
int iThresholdOfInitRate; // threshold of initial rate
int iThresholdOfMaxRate; // threshold of maximal rate
int iThresholdOfMinRate; // threshold of minimal rate
int iMinThresholdFrameRate; //min frame rate min
int iSkipFrameRate; //skip to frame rate min
int iSkipFrameStep; //how many frames to skip
int iWidth; ///< frame width
int iHeight; ///< frame height
int iThresholdOfInitRate; ///< threshold of initial rate
int iThresholdOfMaxRate; ///< threshold of maximal rate
int iThresholdOfMinRate; ///< threshold of minimal rate
int iMinThresholdFrameRate; ///< min frame rate min
int iSkipFrameRate; ///< skip to frame rate min
int iSkipFrameStep; ///< how many frames to skip
} SRateThresholds, *PRateThresholds;
/**
* @brief Structure for decoder memery
*/
typedef struct TagSysMemBuffer {
int iWidth; //width of decoded pic for display
int iHeight; //height of decoded pic for display
int iFormat; // type is "EVideoFormatType"
int iStride[2]; //stride of 2 component
int iWidth; ///< width of decoded pic for display
int iHeight; ///< height of decoded pic for display
int iFormat; ///< type is "EVideoFormatType"
int iStride[2]; ///< stride of 2 component
} SSysMEMBuffer;
/**
* @brief Buffer info
*/
typedef struct TagBufferInfo {
int iBufferStatus; // 0: one frame data is not ready; 1: one frame data is ready
int iBufferStatus; ///< 0: one frame data is not ready; 1: one frame data is ready
unsigned long long uiInBsTimeStamp; ///< input BS timestamp
unsigned long long uiOutYuvTimeStamp; ///< output YUV timestamp, when bufferstatus is 1
union {
SSysMEMBuffer sSystemBuffer;
} UsrData;
SSysMEMBuffer sSystemBuffer; ///< memory info for one picture
} UsrData; ///< output buffer info
} SBufferInfo;
/* Constants related to transmission rate at various resolutions */
static const SRateThresholds ksRateThrMap[4] = {
// initial-maximal-minimal
{CIF_WIDTH, CIF_HEIGHT, 225000, 384000, 96000, 3, 1, 1}, // CIF
{QVGA_WIDTH, QVGA_HEIGHT, 192000, 320000, 80000, -1, -1, -1}, // QVGA
{QCIF_WIDTH, QCIF_HEIGHT, 150000, 256000, 64000, 8, 4, 2}, // QCIF
{SQCIF_WIDTH, SQCIF_HEIGHT, 120000, 192000, 48000, 5, 3, 1} // SQCIF
};
// In a GOP, multiple of the key frame number, derived from
// the number of layers(index or array below)
/**
* @brief In a GOP, multiple of the key frame number, derived from
* the number of layers(index or array below)
*/
static const char kiKeyNumMultiple[] = {
1, 1, 2, 4, 8, 16,
};

15
codec/api/svc/codec_ver.h Normal file
View File

@@ -0,0 +1,15 @@
//The current file is auto-generated by script: generate_codec_ver.sh
#ifndef CODEC_VER_H
#define CODEC_VER_H
#include "codec_app_def.h"
static const OpenH264Version g_stCodecVersion = {1,3,0,0};
static const char* g_strCodecVer = "OpenH264 version:1.3.0.0";
#define OPENH264_MAJOR (1)
#define OPENH264_MINOR (3)
#define OPENH264_REVISION (0)
#define OPENH264_RESERVED (0)
#endif // CODEC_VER_H

View File

@@ -3,6 +3,7 @@ package com.wels.dec;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Process;
import android.util.Log;
import android.view.KeyEvent;
@@ -15,103 +16,136 @@ import java.io.*;
import java.util.Vector;
public class WelsDecTest extends Activity {
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
final String mStreamPath = "/sdcard/wels-seq/";
Vector<String> mStreamFiles = new Vector<String>();
final String mStreamPath = "/sdcard/welsdec/";
Vector<String> mStreamFiles = new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
System.out.println("Here we go ...");
Log.i(TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView(R.layout.main);
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
final TextView tv = new TextView (this);
System.out.println ("Here we go ...");
Log.i (TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView (R.layout.main);
mBtnLoad = (Button)findViewById(R.id.cfg);
mBtnStartSW = (Button)findViewById(R.id.buttonSW);
mBtnLoad = (Button)findViewById (R.id.cfg);
mBtnStartSW = (Button)findViewById (R.id.buttonSW);
OnClickEvent = new OnClickListener()
{
public void onClick(View v)
{
switch(v.getId())
{
case R.id.cfg:
{
String cfgFile = mStreamPath + "BitStreams.txt";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(cfgFile));
String text;
while((text = bufferedReader.readLine()) != null) {
mStreamFiles.add(mStreamPath + text);
Log.i(TAG, mStreamPath + text);
}
bufferedReader.close();
} catch(IOException e) {
Log.e("WELS_DEC", e.getMessage());
}
}
break;
case R.id.buttonSW:
{
System.out.println("decode sequence number = " + mStreamFiles.size());
Log.i("WSE_DEC","after click");
try {
for (int k=0; k < mStreamFiles.size(); k++) {
String inFile = mStreamFiles.get(k);
String outFile = mStreamFiles.get(k) + ".yuv";
Log.i(TAG, "input file:" + inFile+ " output file:" + outFile);
DoDecoderTest(inFile, outFile);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
mStreamFiles.clear();
tv.setText( "Decoder is completed!" );
}
break;
}
OnClickEvent = new OnClickListener() {
public void onClick (View v) {
switch (v.getId()) {
case R.id.cfg: {
String cfgFile = mStreamPath + "BitStreams.txt";
try {
BufferedReader bufferedReader = new BufferedReader (new FileReader (cfgFile));
String text;
while ((text = bufferedReader.readLine()) != null) {
mStreamFiles.add (mStreamPath + text);
Log.i (TAG, mStreamPath + text);
}
};
mBtnLoad.setOnClickListener(OnClickEvent);
mBtnStartSW.setOnClickListener(OnClickEvent);
System.out.println("Done!");
}
@Override
public void onStart()
{
Log.i("WSE_DEC","welsdecdemo onStart");
super.onStart();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown(keyCode, event);
bufferedReader.close();
} catch (IOException e) {
Log.e ("WELS_DEC", e.getMessage());
}
}
}
break;
case R.id.buttonSW: {
System.out.println ("decode sequence number = " + mStreamFiles.size());
Log.i ("WSE_DEC", "after click");
try {
for (int k = 0; k < mStreamFiles.size(); k++) {
String inFile = mStreamFiles.get (k);
String outFile = mStreamFiles.get (k) + ".yuv";
Log.i (TAG, "input file:" + inFile + " output file:" + outFile);
DoDecoderTest (inFile, outFile);
}
} catch (Exception e) {
Log.e (TAG, e.getMessage());
}
mStreamFiles.clear();
tv.setText ("Decoder is completed!");
}
break;
}
}
};
public native void DoDecoderTest(String infilename, String outfilename);
private static final String TAG = "welsdec";
static {
try {
System.loadLibrary("openh264");
System.loadLibrary("stlport_shared");
System.loadLibrary("welsdecdemo");
Log.v(TAG, "Load libwelsdec successful");
mBtnLoad.setOnClickListener (OnClickEvent);
mBtnStartSW.setOnClickListener (OnClickEvent);
System.out.println ("Done!");
//if you want to run the demo manually, just comment following 2 lines
runAutoDec();
}
public void runAutoDec() {
Thread thread = new Thread() {
public void run() {
Log.i (TAG, "decoder performance test begin");
File bitstreams = new File (mStreamPath);
String[] list = bitstreams.list();
if (list == null || list.length == 0) {
Log.i (TAG, "have not find any coder resourse");
finish();
}
catch(Exception e) {
Log.e(TAG, "Failed to load welsdec"+e.getMessage());
for (int i = 0; i < list.length; i++) {
String inFile = list[i];
inFile = mStreamPath + inFile;
String outFile = inFile + ".yuv";
DoDecoderTest (inFile, outFile);
}
Log.i (TAG, "decoder performance test finish");
finish();
}
};
thread.start();
}
@Override
public void onStart() {
Log.i ("WSE_DEC", "welsdecdemo onStart");
super.onStart();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i (TAG, "OnDestroy");
Process.killProcess (Process.myPid());
}
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown (keyCode, event);
}
}
public native void DoDecoderTest (String infilename, String outfilename);
private static final String TAG = "welsdec";
static {
try {
System.loadLibrary ("openh264");
System.loadLibrary ("stlport_shared");
System.loadLibrary ("welsdecdemo");
Log.v (TAG, "Load libwelsdec successful");
} catch (Exception e) {
Log.e (TAG, "Failed to load welsdec" + e.getMessage());
}
}
}

View File

@@ -8,6 +8,27 @@
extern "C" int EncMain (int argc, char* argv[]);
extern "C"
JNIEXPORT void JNICALL Java_com_wels_enc_WelsEncTest_DoEncoderAutoTest
(JNIEnv* env, jobject thiz, jstring jsIncfgName, jstring jsInlayerName, jstring jsInyuvName, jstring jsOutbitName) {
/**************** Add the native codes/API *****************/
const char* argv[]={
(char*)("encConsole.exe"),
(char*) ((*env).GetStringUTFChars (jsIncfgName, NULL)),
(char*)("-org"),
(char*) ((*env).GetStringUTFChars (jsInyuvName, NULL)),
(char*)("-bf"),
(char*) ((*env).GetStringUTFChars (jsOutbitName, NULL)),
(char*)("-numl"),
(char*)("1"),
(char*)("-lconfig"),
(char*)("0"),
(char*) ((*env).GetStringUTFChars (jsInlayerName, NULL))
};
LOGI ("Start to run JNI module!+++");
EncMain(sizeof(argv)/sizeof(argv[0]),(char**)&argv[0]);
LOGI ("End to run JNI module!+++");
}
JNIEXPORT void JNICALL Java_com_wels_enc_WelsEncTest_DoEncoderTest
(JNIEnv* env, jobject thiz, jstring jsFileNameIn) {
/**************** Add the native codes/API *****************/

View File

@@ -3,6 +3,7 @@ package com.wels.enc;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Process;
import android.util.Log;
import android.view.KeyEvent;
@@ -15,104 +16,158 @@ import java.io.*;
import java.util.Vector;
public class WelsEncTest extends Activity {
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
final String mStreamPath = "/sdcard/wels-seq/";
Vector<String> mCfgFiles = new Vector<String>();
final String mStreamPath = "/sdcard/welsenc/";
Vector<String> mCfgFiles = new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
System.out.println("Here we go ...");
Log.i(TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView(R.layout.main);
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
final TextView tv = new TextView (this);
System.out.println ("Here we go ...");
Log.i (TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView (R.layout.main);
mBtnLoad = (Button)findViewById(R.id.cfg);
mBtnStartSW = (Button)findViewById(R.id.buttonSW);
mBtnLoad = (Button)findViewById (R.id.cfg);
mBtnStartSW = (Button)findViewById (R.id.buttonSW);
OnClickEvent = new OnClickListener()
{
public void onClick(View v)
{
switch(v.getId())
{
case R.id.cfg:
{
String cfgFile = mStreamPath + "cfgs.txt";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(cfgFile));
String text;
while((text = bufferedReader.readLine()) != null) {
mCfgFiles.add(mStreamPath + text);
Log.i(TAG, mStreamPath + text);
}
bufferedReader.close();
} catch(IOException e) {
Log.e(TAG, e.getMessage());
}
}
break;
case R.id.buttonSW:
{
System.out.println("decode sequence number = " + mCfgFiles.size());
Log.i(TAG,"after click");
try {
for (int k=0; k < mCfgFiles.size(); k++) {
String cfgFile = mCfgFiles.get(k);
DoEncoderTest(cfgFile);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
mCfgFiles.clear();
tv.setText( "Decoder is completed!" );
}
break;
}
OnClickEvent = new OnClickListener() {
public void onClick (View v) {
switch (v.getId()) {
case R.id.cfg: {
String cfgFile = mStreamPath + "cfgs.txt";
try {
BufferedReader bufferedReader = new BufferedReader (new FileReader (cfgFile));
String text;
while ((text = bufferedReader.readLine()) != null) {
mCfgFiles.add (mStreamPath + text);
Log.i (TAG, mStreamPath + text);
}
};
mBtnLoad.setOnClickListener(OnClickEvent);
mBtnStartSW.setOnClickListener(OnClickEvent);
System.out.println("Done!");
}
@Override
public void onStart()
{
Log.i(TAG,"welsdecdemo onStart");
super.onStart();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown(keyCode, event);
bufferedReader.close();
} catch (IOException e) {
Log.e (TAG, e.getMessage());
}
}
}
break;
case R.id.buttonSW: {
System.out.println ("encode sequence number = " + mCfgFiles.size());
Log.i (TAG, "after click");
try {
for (int k = 0; k < mCfgFiles.size(); k++) {
String cfgFile = mCfgFiles.get (k);
DoEncoderTest (cfgFile);
}
} catch (Exception e) {
Log.e (TAG, e.getMessage());
}
mCfgFiles.clear();
tv.setText ("Encoder is completed!");
}
break;
}
}
};
public native void DoEncoderTest(String cfgFileName);
private static final String TAG = "welsenc";
static {
try {
System.loadLibrary("openh264");
System.loadLibrary("stlport_shared");
System.loadLibrary("welsencdemo");
Log.v(TAG, "Load libwelsencdemo.so successful");
mBtnLoad.setOnClickListener (OnClickEvent);
mBtnStartSW.setOnClickListener (OnClickEvent);
System.out.println ("Done!");
//run the test automatically,if you not want to autotest, just comment this line
runAutoEnc();
}
public void runAutoEnc() {
Thread thread = new Thread() {
public void run() {
Log.i (TAG, "encoder performance test begin");
String inYuvfile = null, outBitfile = null, inOrgfile = null, inLayerfile = null;
File encCase = new File (mStreamPath);
String[] caseNum = encCase.list();
if (caseNum == null || caseNum.length == 0) {
Log.i (TAG, "have not find any encoder resourse");
finish();
}
catch(Exception e) {
Log.e(TAG, "Failed to load welsdec"+e.getMessage());
for (int i = 0; i < caseNum.length; i++) {
String[] yuvName = null;
File yuvPath = null;
File encCaseNo = new File (mStreamPath + caseNum[i]);
String[] encFile = encCaseNo.list();
for (int k = 0; k < encFile.length; k++) {
if (encFile[k].compareToIgnoreCase ("welsenc.cfg") == 0)
inOrgfile = encCaseNo + File.separator + encFile[k];
else if (encFile[k].compareToIgnoreCase ("layer2.cfg") == 0)
inLayerfile = encCaseNo + File.separator + encFile[k];
else if (encFile[k].compareToIgnoreCase ("yuv") == 0) {
yuvPath = new File (encCaseNo + File.separator + encFile[k]);
yuvName = yuvPath.list();
}
}
for (int m = 0; m < yuvName.length; m++) {
inYuvfile = yuvPath + File.separator + yuvName[m];
outBitfile = inYuvfile + ".264";
Log.i (TAG, "enc yuv file:" + yuvName[m]);
DoEncoderAutoTest (inOrgfile, inLayerfile, inYuvfile, outBitfile);
}
}
Log.i (TAG, "encoder performance test finish");
finish();
}
};
thread.start();
}
@Override
public void onStart() {
Log.i (TAG, "welsencdemo onStart");
super.onStart();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i (TAG, "OnDestroy");
Process.killProcess (Process.myPid());
}
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown (keyCode, event);
}
}
public native void DoEncoderTest (String cfgFileName);
public native void DoEncoderAutoTest (String cfgFileName, String layerFileName, String yuvFileName,
String outBitsName);
private static final String TAG = "welsenc";
static {
try {
System.loadLibrary ("openh264");
System.loadLibrary ("stlport_shared");
System.loadLibrary ("welsencdemo");
Log.v (TAG, "Load libwelsencdemo.so successful");
} catch (Exception e) {
Log.e (TAG, "Failed to load welsenc" + e.getMessage());
}
}
}

View File

@@ -0,0 +1,54 @@
# Run this to update the codec_ver.h at changes of api
#!/bin/sh
#
if [ "$1"x = ""x ]; then
echo "Please input the version number as : major_ver.minor_ver.patch.reserve"
exit 127
fi
codec_ver=`echo "$1" | egrep "^([0-9]+[.]){3}[0-9]+$"`
if [ $? -ne 0 ]; then
echo "Please input the version number as : major_ver.minor_ver.patch.reserve"
exit 127
fi
revision=`git show | head -n 1`
revision=`echo $revision|cut -d' ' -f2|sed -e 's#[ ]*\(.*\)[ ]*#\1#'`
revision=${revision:0:7}
echo "//The current file is auto-generated by script: generate_codec_ver.sh" >>codec_ver.h
echo "#ifndef CODEC_VER_H" >>codec_ver.h
echo "#define CODEC_VER_H" >>codec_ver.h
echo "" >>codec_ver.h
echo "#include \"codec_app_def.h\"" >>codec_ver.h
echo "" >>codec_ver.h
echo "static const OpenH264Version g_stCodecVersion = {$1};"|tr '.' ',' >>codec_ver.h
echo "static const char* g_strCodecVer = \"OpenH264 version:$1\";" >>codec_ver.h
#if [ "$2"x = ""x ]; then
#echo "static const char* g_strCodecBuildNum = \"OpenH264 revision:$revision\";" >> codec_ver.h
#else
#echo "static const char* g_strCodecBuildNum = \"OpenH264 build:$2, OpenH264 revision:$revision\";" >> codec_ver.h
#fi
echo "" >>codec_ver.h
#define OPENH264_MAJOR 1, #define OPENH264_MINOR 2 #define OPENH264_REVISION 3 #define OPENH264_RESERVED 0
echo "#define OPENH264_MAJOR (${1%%.*})" >>codec_ver.h
tmp=${1#*.}
echo "#define OPENH264_MINOR (${tmp%%.*})" >>codec_ver.h
tmp=${tmp#*.}
echo "#define OPENH264_REVISION (${tmp%%.*})" >>codec_ver.h
tmp=${tmp#*.}
echo "#define OPENH264_RESERVED (${tmp%%.*})" >>codec_ver.h
echo "" >>codec_ver.h
echo "#endif // CODEC_VER_H" >>codec_ver.h
mv -f codec_ver.h ../api/svc/codec_ver.h

View File

@@ -25,6 +25,9 @@
F5AC94FF193EB7D800F58154 /* deblocking_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F5AC94FE193EB7D800F58154 /* deblocking_aarch64_neon.S */; };
F5B8D82D190757290037849A /* mc_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F5B8D82C190757290037849A /* mc_aarch64_neon.S */; };
F5BB0BB8196BB5960072D50D /* copy_mb_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F5BB0BB7196BB5960072D50D /* copy_mb_aarch64_neon.S */; };
F791965419D3B89D00F60C6B /* intra_pred_common_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F791965319D3B89D00F60C6B /* intra_pred_common_aarch64_neon.S */; };
F791965619D3B8A600F60C6B /* intra_pred_common_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F791965519D3B8A600F60C6B /* intra_pred_common_neon.S */; };
F791965919D3BE2200F60C6B /* intra_pred_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F791965819D3BE2200F60C6B /* intra_pred_common.cpp */; };
FAABAA1818E9354A00D4186F /* sad_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAABAA1718E9354A00D4186F /* sad_common.cpp */; };
/* End PBXBuildFile section */
@@ -74,6 +77,10 @@
F5AC94FE193EB7D800F58154 /* deblocking_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = deblocking_aarch64_neon.S; path = arm64/deblocking_aarch64_neon.S; sourceTree = "<group>"; };
F5B8D82C190757290037849A /* mc_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = mc_aarch64_neon.S; path = arm64/mc_aarch64_neon.S; sourceTree = "<group>"; };
F5BB0BB7196BB5960072D50D /* copy_mb_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = copy_mb_aarch64_neon.S; path = arm64/copy_mb_aarch64_neon.S; sourceTree = "<group>"; };
F791965319D3B89D00F60C6B /* intra_pred_common_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = intra_pred_common_aarch64_neon.S; path = arm64/intra_pred_common_aarch64_neon.S; sourceTree = "<group>"; };
F791965519D3B8A600F60C6B /* intra_pred_common_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = intra_pred_common_neon.S; sourceTree = "<group>"; };
F791965719D3BA9300F60C6B /* intra_pred_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intra_pred_common.h; sourceTree = "<group>"; };
F791965819D3BE2200F60C6B /* intra_pred_common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intra_pred_common.cpp; sourceTree = "<group>"; };
FAABAA1618E9353F00D4186F /* sad_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sad_common.h; sourceTree = "<group>"; };
FAABAA1718E9354A00D4186F /* sad_common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sad_common.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -93,6 +100,7 @@
4C3406B118D96EA600DFA14A /* arm */ = {
isa = PBXGroup;
children = (
F791965519D3B8A600F60C6B /* intra_pred_common_neon.S */,
4CC61F0818FF6B4B00E56EAB /* copy_mb_neon.S */,
4C3406B218D96EA600DFA14A /* arm_arch_common_macro.S */,
4C3406B318D96EA600DFA14A /* deblocking_neon.S */,
@@ -105,6 +113,7 @@
4C3406B618D96EA600DFA14A /* inc */ = {
isa = PBXGroup;
children = (
F791965719D3BA9300F60C6B /* intra_pred_common.h */,
F0B204F718FD23B6005DA23F /* copy_mb.h */,
FAABAA1618E9353F00D4186F /* sad_common.h */,
4C3406B718D96EA600DFA14A /* cpu.h */,
@@ -126,6 +135,7 @@
4C3406C318D96EA600DFA14A /* src */ = {
isa = PBXGroup;
children = (
F791965819D3BE2200F60C6B /* intra_pred_common.cpp */,
5BA8F2BF19603F5F00011CE4 /* common_tables.cpp */,
F0B204F818FD23BF005DA23F /* copy_mb.cpp */,
FAABAA1718E9354A00D4186F /* sad_common.cpp */,
@@ -179,6 +189,7 @@
F556A81D1906669F00E156A8 /* arm64 */ = {
isa = PBXGroup;
children = (
F791965319D3B89D00F60C6B /* intra_pred_common_aarch64_neon.S */,
F5BB0BB7196BB5960072D50D /* copy_mb_aarch64_neon.S */,
F5AC94FE193EB7D800F58154 /* deblocking_aarch64_neon.S */,
F5B8D82C190757290037849A /* mc_aarch64_neon.S */,
@@ -244,12 +255,15 @@
F556A8241906673900E156A8 /* arm_arch64_common_macro.S in Sources */,
F5AC94FF193EB7D800F58154 /* deblocking_aarch64_neon.S in Sources */,
4C3406CE18D96EA600DFA14A /* crt_util_safe_x.cpp in Sources */,
F791965919D3BE2200F60C6B /* intra_pred_common.cpp in Sources */,
4C3406CF18D96EA600DFA14A /* deblocking_common.cpp in Sources */,
5BA8F2C019603F5F00011CE4 /* common_tables.cpp in Sources */,
F791965419D3B89D00F60C6B /* intra_pred_common_aarch64_neon.S in Sources */,
4C3406D118D96EA600DFA14A /* WelsThreadLib.cpp in Sources */,
4C3406CC18D96EA600DFA14A /* mc_neon.S in Sources */,
F5BB0BB8196BB5960072D50D /* copy_mb_aarch64_neon.S in Sources */,
4C3406CB18D96EA600DFA14A /* expand_picture_neon.S in Sources */,
F791965619D3B8A600F60C6B /* intra_pred_common_neon.S in Sources */,
4CC61F0918FF6B4B00E56EAB /* copy_mb_neon.S in Sources */,
53C1C9BC193F0FB000404D8F /* expand_pic.cpp in Sources */,
4C3406CD18D96EA600DFA14A /* cpu.cpp in Sources */,
@@ -294,7 +308,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
@@ -325,7 +339,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
@@ -354,8 +368,11 @@
HAVE_NEON,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
ONLY_ACTIVE_ARCH = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../api/svc",
);
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -383,7 +400,11 @@
HAVE_NEON,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../api/svc",
);
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;

View File

@@ -42,6 +42,20 @@
remoteGlobalIDString = 4CE4427918B6FC360017DF25;
remoteInfo = welsdec;
};
541044A6199888F800B44931 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 4CE444FA18B72AD70017DF25 /* welsdec.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE4427818B6FC360017DF25;
remoteInfo = welsdec;
};
541044A8199888F800B44931 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 4CE444F018B72A8F0017DF25 /* common.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE443D418B722CD0017DF25;
remoteInfo = common;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
@@ -53,7 +67,7 @@
F0E6634D1810EFA5000C888E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
F0E663511810EFA5000C888E /* demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "demo-Info.plist"; sourceTree = "<group>"; };
F0E663531810EFA5000C888E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
F0E663551810EFA5000C888E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
F0E663551810EFA5000C888E /* main.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; path = main.m; sourceTree = "<group>"; };
F0E663581810EFA5000C888E /* DEMOAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DEMOAppDelegate.h; sourceTree = "<group>"; };
F0E663591810EFA5000C888E /* DEMOAppDelegate.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; path = DEMOAppDelegate.m; sourceTree = "<group>"; };
F0E6635B1810EFA5000C888E /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
@@ -206,6 +220,8 @@
buildRules = (
);
dependencies = (
541044A7199888F800B44931 /* PBXTargetDependency */,
541044A9199888F800B44931 /* PBXTargetDependency */,
);
name = demo;
productName = demo;
@@ -299,6 +315,19 @@
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
541044A7199888F800B44931 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = welsdec;
targetProxy = 541044A6199888F800B44931 /* PBXContainerItemProxy */;
};
541044A9199888F800B44931 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = common;
targetProxy = 541044A8199888F800B44931 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
F0E663521810EFA5000C888E /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
@@ -352,7 +381,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -377,7 +406,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -398,6 +427,7 @@
APPLE_IOS,
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../common/inc\"",
);
@@ -417,6 +447,7 @@
GCC_C_LANGUAGE_STANDARD = "compiler-default";
GCC_PREPROCESSOR_DEFINITIONS = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../common/inc\"",
);

View File

@@ -34,9 +34,91 @@
#import "DEMOAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([DEMOAppDelegate class]));
}
extern int DecMain (int argc, char* argv[]);
//redirect NSLog and stdout to logfile
void redirectLogToDocumentFile() {
NSArray* path = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString* document = [path objectAtIndex:0];
NSString* fileName = [NSString stringWithFormat:@"decPerf.log"];
NSString* logPath = [document stringByAppendingPathComponent:fileName];
NSFileManager* defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logPath error:nil];
freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
//run auto test to get encoder performance
int AutoTestDec() {
NSString* document = [[NSString alloc] init];
NSArray* paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
if ([paths count] == 0) {
NSLog (@"could not find document path");
return 2;
}
document = [paths objectAtIndex:0];
NSString* decFilePath = [document stringByAppendingString:@"/DecoderPerfTestRes"];
NSFileManager* manage = [NSFileManager defaultManager];
NSString* outYuvPath = [decFilePath stringByAppendingString:@"/yuv"];
[manage removeItemAtPath:outYuvPath error:nil];
[manage createDirectoryAtPath:outYuvPath withIntermediateDirectories:YES attributes:nil error: nil];
NSArray* bitstreams = [manage subpathsAtPath:decFilePath];
if (bitstreams == nil) {
NSLog (@"could not find any bitstream under decoderperfpath");
return 1;
}
redirectLogToDocumentFile(); //output to console, just comment this line
for (int caseNO = 0; caseNO < [bitstreams count]; caseNO++) {
NSString* caseName = [bitstreams objectAtIndex:caseNO];
if ([caseName isEqual: @"yuv"]) {
break;
}
NSString* bitstream = [decFilePath stringByAppendingString:@"/"];
bitstream = [bitstream stringByAppendingString:caseName];
NSString* yuvFileName = [caseName stringByAppendingString:@".yuv"];
NSString* tmpyuvFileName = [outYuvPath stringByAppendingString:@"/"];
yuvFileName = [tmpyuvFileName stringByAppendingString:yuvFileName];
[manage createFileAtPath:yuvFileName contents:nil attributes:nil];
const char* argvv[] = {
"decConsole.exe",
[bitstream UTF8String],
[yuvFileName UTF8String]
};
DecMain (sizeof (argvv) / sizeof (argvv[0]), (char**)&argvv[0]);
[manage removeItemAtPath:yuvFileName error:nil];//FOR limited devices spaces
fflush (stdout); // flush the content of stdout instantly
}
return 0;
}
int main (int argc, char* argv[]) {
//***For auto testing of decoder performance, call auto test here, if you not want to do auto test, you can comment it manualy
if (AutoTestDec() == 0)
NSLog (@"Auto testing running sucessfully");
else
NSLog (@"Auto testing running failed");
abort();
//********
@autoreleasepool {
return UIApplicationMain (argc, argv, nil, NSStringFromClass ([DEMOAppDelegate class]));
}
}

View File

@@ -30,6 +30,8 @@
4CE4469F18BC5EAB0017DF25 /* welsDecoderExt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4468518BC5EAB0017DF25 /* welsDecoderExt.cpp */; };
4CE447AC18BC6BE90017DF25 /* block_add_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 4CE447A718BC6BE90017DF25 /* block_add_neon.S */; };
4CE447AE18BC6BE90017DF25 /* intra_pred_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 4CE447A918BC6BE90017DF25 /* intra_pred_neon.S */; };
6A3E814219D79AE900C19C1F /* cabac_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A3E814119D79AE900C19C1F /* cabac_decoder.cpp */; };
6A3E814419D7A40600C19C1F /* parse_mb_syn_cabac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A3E814319D7A40600C19C1F /* parse_mb_syn_cabac.cpp */; };
6C749B6A197CC6E600A111F9 /* block_add_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 6C749B69197CC6E600A111F9 /* block_add_aarch64_neon.S */; };
9ABF4382193EB60900A6BD61 /* expand_pic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9ABF4381193EB60900A6BD61 /* expand_pic.cpp */; };
9AED66561946A1DE009A3567 /* welsCodecTrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AED66551946A1DE009A3567 /* welsCodecTrace.cpp */; };
@@ -109,6 +111,10 @@
4CE4468518BC5EAB0017DF25 /* welsDecoderExt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = welsDecoderExt.cpp; sourceTree = "<group>"; };
4CE447A718BC6BE90017DF25 /* block_add_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = block_add_neon.S; sourceTree = "<group>"; };
4CE447A918BC6BE90017DF25 /* intra_pred_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = intra_pred_neon.S; sourceTree = "<group>"; };
6A3E814019D79AD900C19C1F /* cabac_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cabac_decoder.h; sourceTree = "<group>"; };
6A3E814119D79AE900C19C1F /* cabac_decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cabac_decoder.cpp; sourceTree = "<group>"; };
6A3E814319D7A40600C19C1F /* parse_mb_syn_cabac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_mb_syn_cabac.cpp; sourceTree = "<group>"; };
6A3E814519D7A40D00C19C1F /* parse_mb_syn_cabac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_mb_syn_cabac.h; sourceTree = "<group>"; };
6C749B69197CC6E600A111F9 /* block_add_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = block_add_aarch64_neon.S; path = arm64/block_add_aarch64_neon.S; sourceTree = "<group>"; };
9ABF4380193EB5F700A6BD61 /* expand_pic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = expand_pic.h; path = ../../../common/inc/expand_pic.h; sourceTree = "<group>"; };
9ABF4381193EB60900A6BD61 /* expand_pic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = expand_pic.cpp; path = ../../../common/src/expand_pic.cpp; sourceTree = "<group>"; };
@@ -191,6 +197,8 @@
4CE4464418BC5EAA0017DF25 /* inc */ = {
isa = PBXGroup;
children = (
6A3E814519D7A40D00C19C1F /* parse_mb_syn_cabac.h */,
6A3E814019D79AD900C19C1F /* cabac_decoder.h */,
9AED665A1946A21D009A3567 /* utils.h */,
9ABF4380193EB5F700A6BD61 /* expand_pic.h */,
F0B204FA18FD23CF005DA23F /* error_concealment.h */,
@@ -232,6 +240,8 @@
4CE4466618BC5EAA0017DF25 /* src */ = {
isa = PBXGroup;
children = (
6A3E814319D7A40600C19C1F /* parse_mb_syn_cabac.cpp */,
6A3E814119D79AE900C19C1F /* cabac_decoder.cpp */,
9AED66581946A203009A3567 /* utils.cpp */,
9ABF4381193EB60900A6BD61 /* expand_pic.cpp */,
F0B204FB18FD23D8005DA23F /* error_concealment.cpp */,
@@ -346,6 +356,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6A3E814419D7A40600C19C1F /* parse_mb_syn_cabac.cpp in Sources */,
4CE4469B18BC5EAB0017DF25 /* pic_queue.cpp in Sources */,
4CE4469F18BC5EAB0017DF25 /* welsDecoderExt.cpp in Sources */,
4CE4469318BC5EAB0017DF25 /* fmo.cpp in Sources */,
@@ -355,6 +366,7 @@
4CE4469518BC5EAB0017DF25 /* manage_dec_ref.cpp in Sources */,
4CE4468A18BC5EAB0017DF25 /* au_parser.cpp in Sources */,
4CE4469918BC5EAB0017DF25 /* mv_pred.cpp in Sources */,
6A3E814219D79AE900C19C1F /* cabac_decoder.cpp in Sources */,
4CE447AC18BC6BE90017DF25 /* block_add_neon.S in Sources */,
6C749B6A197CC6E600A111F9 /* block_add_aarch64_neon.S in Sources */,
4CE4469418BC5EAB0017DF25 /* get_intra_predictor.cpp in Sources */,
@@ -410,7 +422,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
@@ -441,7 +453,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
@@ -470,13 +482,12 @@
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../common/inc",
"$(SRCROOT)/../../../../api/svc",
"$(SRCROOT)/../../../../common/arm",
"$(SRCROOT)/../../../../common/arm64",
);
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -505,13 +516,12 @@
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../common/inc",
"$(SRCROOT)/../../../../api/svc",
"$(SRCROOT)/../../../../common/arm",
"$(SRCROOT)/../../../../common/arm64",
);
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;

View File

@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
544F0DC4196F86F50092FC6F /* libprocessing.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 544F0DC3196F86EF0092FC6F /* libprocessing.a */; };
FAA3D9D318BD729500BCD52D /* welsenc_ios.cfg in Resources */ = {isa = PBXBuildFile; fileRef = FAA3D9D218BD729500BCD52D /* welsenc_ios.cfg */; };
FAA3D9D818BD777100BCD52D /* CiscoVT2people_320x192_12fps.yuv in Resources */ = {isa = PBXBuildFile; fileRef = FAA3D9D718BD777100BCD52D /* CiscoVT2people_320x192_12fps.yuv */; };
FAA3D9DD18BD8A5600BCD52D /* layer2.cfg in Resources */ = {isa = PBXBuildFile; fileRef = FAA3D9DC18BD8A5600BCD52D /* layer2.cfg */; };
@@ -21,13 +22,26 @@
FAFB4FC218BC8DD700315438 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FAFB4FC118BC8DD700315438 /* ViewController.m */; };
FAFB4FC418BC8DD700315438 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FAFB4FC318BC8DD700315438 /* Images.xcassets */; };
FAFB500318BC8F0D00315438 /* libcommon.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFB4FF118BC8E8600315438 /* libcommon.a */; };
FAFB500418BC8F1100315438 /* libprocessing.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFB4FFA18BC8E9A00315438 /* libprocessing.a */; };
FAFB500518BC8F1500315438 /* libwelsenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFB4FE818BC8E7D00315438 /* libwelsenc.a */; };
FAFB500B18BC8F6C00315438 /* welsenc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAFB500A18BC8F6C00315438 /* welsenc.cpp */; };
FAFB502F18BCA50900315438 /* read_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAFB502E18BCA50900315438 /* read_config.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
544F0DBF196F86EF0092FC6F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 544F0DB9196F85F20092FC6F /* processing.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 5499477B196A3F3900BA3D87;
remoteInfo = processing;
};
544F0DC2196F86EF0092FC6F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 544F0DB9196F85F20092FC6F /* processing.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5499477C196A3F3900BA3D87;
remoteInfo = processing;
};
FAFB4FE718BC8E7D00315438 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FAFB4FE218BC8E7C00315438 /* welsenc.xcodeproj */;
@@ -42,13 +56,6 @@
remoteGlobalIDString = 4CE443D518B722CD0017DF25;
remoteInfo = common;
};
FAFB4FF918BC8E9A00315438 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FAFB4FF418BC8E9A00315438 /* processing.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 4CE4443118B724B60017DF25;
remoteInfo = processing;
};
FAFB4FFD18BC8EAA00315438 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FAFB4FEB18BC8E8600315438 /* common.xcodeproj */;
@@ -56,13 +63,6 @@
remoteGlobalIDString = 4CE443D418B722CD0017DF25;
remoteInfo = common;
};
FAFB4FFF18BC8EAF00315438 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FAFB4FF418BC8E9A00315438 /* processing.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE4443018B724B60017DF25;
remoteInfo = processing;
};
FAFB500118BC8EB200315438 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FAFB4FE218BC8E7C00315438 /* welsenc.xcodeproj */;
@@ -73,6 +73,7 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
544F0DB9196F85F20092FC6F /* processing.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = processing.xcodeproj; path = ../../processing/processing.xcodeproj; sourceTree = "<group>"; };
FAA3D9D218BD729500BCD52D /* welsenc_ios.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = welsenc_ios.cfg; path = ../../../../../../testbin/welsenc_ios.cfg; sourceTree = "<group>"; };
FAA3D9D718BD777100BCD52D /* CiscoVT2people_320x192_12fps.yuv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CiscoVT2people_320x192_12fps.yuv; path = ../../../../../../res/CiscoVT2people_320x192_12fps.yuv; sourceTree = "<group>"; };
FAA3D9DC18BD8A5600BCD52D /* layer2.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = layer2.cfg; path = ../../../../../../testbin/layer2.cfg; sourceTree = "<group>"; };
@@ -93,7 +94,6 @@
FAFB4FC318BC8DD700315438 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
FAFB4FE218BC8E7C00315438 /* welsenc.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = welsenc.xcodeproj; path = ../welsenc/welsenc.xcodeproj; sourceTree = "<group>"; };
FAFB4FEB18BC8E8600315438 /* common.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = common.xcodeproj; path = ../../common/common.xcodeproj; sourceTree = "<group>"; };
FAFB4FF418BC8E9A00315438 /* processing.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = processing.xcodeproj; path = ../../../../processing/build/iOS/processing.xcodeproj; sourceTree = "<group>"; };
FAFB500918BC8F6600315438 /* read_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read_config.h; sourceTree = "<group>"; };
FAFB500A18BC8F6C00315438 /* welsenc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = welsenc.cpp; sourceTree = "<group>"; };
FAFB502E18BCA50900315438 /* read_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = read_config.cpp; path = ../../common/src/read_config.cpp; sourceTree = "<group>"; };
@@ -104,8 +104,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
544F0DC4196F86F50092FC6F /* libprocessing.a in Frameworks */,
FAFB500518BC8F1500315438 /* libwelsenc.a in Frameworks */,
FAFB500418BC8F1100315438 /* libprocessing.a in Frameworks */,
FAFB500318BC8F0D00315438 /* libcommon.a in Frameworks */,
FAFB4FAB18BC8DD700315438 /* CoreGraphics.framework in Frameworks */,
FAFB4FAD18BC8DD700315438 /* UIKit.framework in Frameworks */,
@@ -116,6 +116,14 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
544F0DBA196F85F20092FC6F /* Products */ = {
isa = PBXGroup;
children = (
544F0DC3196F86EF0092FC6F /* libprocessing.a */,
);
name = Products;
sourceTree = "<group>";
};
FAFB4F9C18BC8DD700315438 = {
isa = PBXGroup;
children = (
@@ -136,7 +144,7 @@
FAFB4FA718BC8DD700315438 /* Frameworks */ = {
isa = PBXGroup;
children = (
FAFB4FF418BC8E9A00315438 /* processing.xcodeproj */,
544F0DB9196F85F20092FC6F /* processing.xcodeproj */,
FAFB4FEB18BC8E8600315438 /* common.xcodeproj */,
FAFB4FE218BC8E7C00315438 /* welsenc.xcodeproj */,
FAFB4FA818BC8DD700315438 /* Foundation.framework */,
@@ -192,14 +200,6 @@
name = Products;
sourceTree = "<group>";
};
FAFB4FF518BC8E9A00315438 /* Products */ = {
isa = PBXGroup;
children = (
FAFB4FFA18BC8E9A00315438 /* libprocessing.a */,
);
name = Products;
sourceTree = "<group>";
};
FAFB500618BC8F2800315438 /* console */ = {
isa = PBXGroup;
children = (
@@ -242,8 +242,8 @@
buildRules = (
);
dependencies = (
544F0DC0196F86EF0092FC6F /* PBXTargetDependency */,
FAFB500218BC8EB200315438 /* PBXTargetDependency */,
FAFB500018BC8EAF00315438 /* PBXTargetDependency */,
FAFB4FFE18BC8EAA00315438 /* PBXTargetDependency */,
);
name = encDemo;
@@ -277,8 +277,8 @@
ProjectRef = FAFB4FEB18BC8E8600315438 /* common.xcodeproj */;
},
{
ProductGroup = FAFB4FF518BC8E9A00315438 /* Products */;
ProjectRef = FAFB4FF418BC8E9A00315438 /* processing.xcodeproj */;
ProductGroup = 544F0DBA196F85F20092FC6F /* Products */;
ProjectRef = 544F0DB9196F85F20092FC6F /* processing.xcodeproj */;
},
{
ProductGroup = FAFB4FE318BC8E7C00315438 /* Products */;
@@ -293,6 +293,13 @@
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
544F0DC3196F86EF0092FC6F /* libprocessing.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libprocessing.a;
remoteRef = 544F0DC2196F86EF0092FC6F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FAFB4FE818BC8E7D00315438 /* libwelsenc.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@@ -307,13 +314,6 @@
remoteRef = FAFB4FF018BC8E8600315438 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FAFB4FFA18BC8E9A00315438 /* libprocessing.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libprocessing.a;
remoteRef = FAFB4FF918BC8E9A00315438 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
@@ -349,16 +349,16 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
544F0DC0196F86EF0092FC6F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = processing;
targetProxy = 544F0DBF196F86EF0092FC6F /* PBXContainerItemProxy */;
};
FAFB4FFE18BC8EAA00315438 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = common;
targetProxy = FAFB4FFD18BC8EAA00315438 /* PBXContainerItemProxy */;
};
FAFB500018BC8EAF00315438 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = processing;
targetProxy = FAFB4FFF18BC8EAF00315438 /* PBXContainerItemProxy */;
};
FAFB500218BC8EB200315438 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = welsenc;
@@ -426,14 +426,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"/Applications/Xcode\\ 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../processing/interface\"",
"\"$(SRCROOT)/../../../../encoder/core/inc\"",
);
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -466,14 +459,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"/Applications/Xcode\\ 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../processing/interface\"",
"\"$(SRCROOT)/../../../../encoder/core/inc\"",
);
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@@ -488,9 +474,10 @@
GCC_PREPROCESSOR_DEFINITIONS = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"/Applications/Xcode\\ 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../common/inc\"",
"\"$(SRCROOT)/../../../../processing/interface\"",
"\"$(SRCROOT)/../../../../encoder/core/inc\"",
);
INFOPLIST_FILE = "encDemo/encDemo-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -506,9 +493,10 @@
GCC_PREPROCESSOR_DEFINITIONS = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"/Applications/Xcode\\ 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"\"$(SRCROOT)/../../../../api/svc\"",
"\"$(SRCROOT)/../../../../common/inc\"",
"\"$(SRCROOT)/../../../../processing/interface\"",
"\"$(SRCROOT)/../../../../encoder/core/inc\"",
);
INFOPLIST_FILE = "encDemo/encDemo-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";

View File

@@ -70,6 +70,8 @@ extern int EncMain(int argc, char **argv);
[bsfile UTF8String],
"-numl",
"1",
"-lconfig",
"0",
[dlayerCfg UTF8String],
};
NSLog(@"WELS_INFO: enc config file: %@", encCfg);

View File

@@ -35,9 +35,141 @@
#import "AppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
extern int EncMain (int argc, char** argv);
//redirect NSLog and stdout to logfile
void redirectLogToDocumentFile() {
NSArray* path = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString* document = [path objectAtIndex:0];
NSString* fileName = [NSString stringWithFormat:@"encPerf.log"];
NSString* logPath = [document stringByAppendingPathComponent:fileName];
NSFileManager* defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logPath error:nil];
freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
//to judge whether the path is needed case path
bool IsOneDeptDir (NSString* path) {
BOOL isDir = NO;
BOOL isOneDeptDir = NO;
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray* dirPathArray = [fileManager subpathsAtPath:path];
if ([dirPathArray count] == 0 || dirPathArray == nil)
isOneDeptDir = NO;
else {
for (NSString * dirPath in dirPathArray) {
NSString* tmpPath = [path stringByAppendingString:@"/"];
tmpPath = [tmpPath stringByAppendingString:dirPath];
[fileManager fileExistsAtPath:tmpPath isDirectory:&isDir];
if (isDir) {
isOneDeptDir = YES;
break;
}
}
}
return isOneDeptDir;
}
//run auto test to get encoder performance
int AutoTestEnc() {
NSString* document = [[NSString alloc] init];
NSArray* paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
if ([paths count] == 0) {
NSLog (@"could not find document path");
return 2;
}
document = [paths objectAtIndex:0];
NSString* encFilePath = [document stringByAppendingString:@"/EncoderPerfTestRes"];
NSFileManager* manage = [NSFileManager defaultManager];
NSArray* cases = [manage subpathsAtPath:encFilePath];
if (cases == nil) {
NSLog (@"could not find any test case under encoderperftest");
return 1;
}
redirectLogToDocumentFile();
NSMutableArray* dirArray = [[NSMutableArray alloc] init];
for (NSString * casePath in cases) {
NSString* path = [encFilePath stringByAppendingPathComponent:casePath];
if (IsOneDeptDir (path)) {
[dirArray addObject:casePath];
}
}
for (int caseNO = 0; caseNO < [dirArray count]; caseNO++) {
NSString* caseName = [dirArray objectAtIndex:caseNO];
NSString* caseFilePath = [encFilePath stringByAppendingString:@"/"];
caseFilePath = [caseFilePath stringByAppendingString:caseName];
[manage changeCurrentDirectoryPath:[caseFilePath stringByExpandingTildeInPath]];
NSString* welscfg = [caseFilePath stringByAppendingString:@"/welsenc.cfg"];
NSString* layercfg = [caseFilePath stringByAppendingString:@"/layer2.cfg"];
NSString* yuvFilePath = [caseFilePath stringByAppendingString:@"/yuv"];
NSString* bitFilePath = [caseFilePath stringByAppendingString:@"/bit"];
[manage removeItemAtPath:bitFilePath error:nil];
[manage createDirectoryAtPath:bitFilePath withIntermediateDirectories:YES attributes:nil error:nil];
NSArray* files = [manage subpathsAtPath:yuvFilePath];
[manage changeCurrentDirectoryPath:[bitFilePath stringByExpandingTildeInPath]];
for (int i = 0; i < [files count]; i++) {
NSString* yuvFileName = [files objectAtIndex:i];
NSString* bitFileName = [yuvFileName stringByAppendingString:@".264"];
NSString* bitFileNamePath = [bitFilePath stringByAppendingString:@"/"];
bitFileName = [bitFileNamePath stringByAppendingString:bitFileName];
[manage createFileAtPath:bitFileName contents:nil attributes:nil];
[manage changeCurrentDirectoryPath:[yuvFilePath stringByExpandingTildeInPath]];
const char* argvv[] = {
"dummy",
[welscfg UTF8String],
"-org",
[yuvFileName UTF8String],
"-bf",
[bitFileName UTF8String],
"-numl",
"1",
"-lconfig",
"0",
[layercfg UTF8String]
};
NSLog (@"WELS_INFO: enc config file: %@", welscfg);
NSLog (@"WELS_INFO: enc yuv file: %@", yuvFileName);
EncMain (sizeof (argvv) / sizeof (argvv[0]), (char**)&argvv[0]);
fflush (stdout); // flush the content of stdout instantly
}
}
return 0;
}
int main (int argc, char* argv[]) {
//***For auto testing of encoder performance, call auto test here, if you not want to do auto test, you can comment it manualy
if (AutoTestEnc() == 0)
NSLog (@"Auto testing running sucessfully");
else
NSLog (@"Auto testing running failed");
abort();
//************************
@autoreleasepool {
return UIApplicationMain (argc, argv, nil, NSStringFromClass ([AppDelegate class]));
}
}

View File

@@ -45,10 +45,14 @@
4CE4472918BC605C0017DF25 /* svc_set_mb_syn_cavlc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CE446F818BC605C0017DF25 /* svc_set_mb_syn_cavlc.cpp */; };
4CE4472B18BC605C0017DF25 /* wels_preprocess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CE446FA18BC605C0017DF25 /* wels_preprocess.cpp */; };
4CE4472E18BC605C0017DF25 /* welsEncoderExt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4470618BC605C0017DF25 /* welsEncoderExt.cpp */; };
6CA38DA31991CACE003EAAE0 /* svc_motion_estimation.S in Sources */ = {isa = PBXBuildFile; fileRef = 6CA38DA21991CACE003EAAE0 /* svc_motion_estimation.S */; };
6CA38DA51991D31A003EAAE0 /* svc_motion_estimation_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 6CA38DA41991D31A003EAAE0 /* svc_motion_estimation_aarch64_neon.S */; };
9AED665019469FC1009A3567 /* welsCodecTrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AED664C19469FC1009A3567 /* welsCodecTrace.cpp */; };
9AED66661946A2B3009A3567 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AED66651946A2B3009A3567 /* utils.cpp */; };
F5617A50196A833A006E2B20 /* reconstruct_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F5617A4F196A833A006E2B20 /* reconstruct_aarch64_neon.S */; };
F5BE8005196B913200ED02ED /* memory_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = F5BE8004196B913200ED02ED /* memory_aarch64_neon.S */; };
F7E9994519EBD1E9009B1021 /* svc_set_mb_syn_cabac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E9994419EBD1E9009B1021 /* svc_set_mb_syn_cabac.cpp */; };
F7E9994919EBD1F8009B1021 /* set_mb_syn_cabac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E9994819EBD1F8009B1021 /* set_mb_syn_cabac.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -154,12 +158,18 @@
4CE446FE18BC605C0017DF25 /* welsEncoderExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = welsEncoderExt.h; sourceTree = "<group>"; };
4CE4470418BC605C0017DF25 /* wels_enc_export.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wels_enc_export.def; sourceTree = "<group>"; };
4CE4470618BC605C0017DF25 /* welsEncoderExt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = welsEncoderExt.cpp; sourceTree = "<group>"; };
6CA38DA21991CACE003EAAE0 /* svc_motion_estimation.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = svc_motion_estimation.S; sourceTree = "<group>"; };
6CA38DA41991D31A003EAAE0 /* svc_motion_estimation_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = svc_motion_estimation_aarch64_neon.S; path = arm64/svc_motion_estimation_aarch64_neon.S; sourceTree = "<group>"; };
9AED664819469FAF009A3567 /* welsCodecTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = welsCodecTrace.h; path = ../../../common/inc/welsCodecTrace.h; sourceTree = "<group>"; };
9AED664C19469FC1009A3567 /* welsCodecTrace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = welsCodecTrace.cpp; path = ../../../common/src/welsCodecTrace.cpp; sourceTree = "<group>"; };
9AED66651946A2B3009A3567 /* utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cpp; path = ../../../common/src/utils.cpp; sourceTree = "<group>"; };
9AED66671946A2C4009A3567 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../../common/inc/utils.h; sourceTree = "<group>"; };
F5617A4F196A833A006E2B20 /* reconstruct_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = reconstruct_aarch64_neon.S; path = arm64/reconstruct_aarch64_neon.S; sourceTree = "<group>"; };
F5BE8004196B913200ED02ED /* memory_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = memory_aarch64_neon.S; path = arm64/memory_aarch64_neon.S; sourceTree = "<group>"; };
F7E9994419EBD1E9009B1021 /* svc_set_mb_syn_cabac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = svc_set_mb_syn_cabac.cpp; sourceTree = "<group>"; };
F7E9994819EBD1F8009B1021 /* set_mb_syn_cabac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = set_mb_syn_cabac.cpp; sourceTree = "<group>"; };
F7E9997E19EBD3C6009B1021 /* set_mb_syn_cabac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = set_mb_syn_cabac.h; sourceTree = "<group>"; };
F7E9997F19EBD3CE009B1021 /* svc_set_mb_syn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svc_set_mb_syn.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -177,6 +187,7 @@
4C34066418C57D0400DFA14A /* arm */ = {
isa = PBXGroup;
children = (
6CA38DA21991CACE003EAAE0 /* svc_motion_estimation.S */,
4C34066618C57D0400DFA14A /* intra_pred_neon.S */,
4C34066718C57D0400DFA14A /* intra_pred_sad_3_opt_neon.S */,
4C34066918C57D0400DFA14A /* memory_neon.S */,
@@ -189,6 +200,7 @@
4CB8F2B219235FAC005D6386 /* arm64 */ = {
isa = PBXGroup;
children = (
6CA38DA41991D31A003EAAE0 /* svc_motion_estimation_aarch64_neon.S */,
F5BE8004196B913200ED02ED /* memory_aarch64_neon.S */,
F5617A4F196A833A006E2B20 /* reconstruct_aarch64_neon.S */,
4C23BC5F195A77E0003B81FC /* intra_pred_sad_3_opt_aarch64_neon.S */,
@@ -248,6 +260,8 @@
4CE446A918BC605C0017DF25 /* inc */ = {
isa = PBXGroup;
children = (
F7E9997F19EBD3CE009B1021 /* svc_set_mb_syn.h */,
F7E9997E19EBD3C6009B1021 /* set_mb_syn_cabac.h */,
9AED66671946A2C4009A3567 /* utils.h */,
4CDBFB9D18E5068D0025A767 /* wels_transpose_matrix.h */,
4CE446AA18BC605C0017DF25 /* as264_common.h */,
@@ -303,6 +317,8 @@
4CE446DC18BC605C0017DF25 /* src */ = {
isa = PBXGroup;
children = (
F7E9994819EBD1F8009B1021 /* set_mb_syn_cabac.cpp */,
F7E9994419EBD1E9009B1021 /* svc_set_mb_syn_cabac.cpp */,
9AED66651946A2B3009A3567 /* utils.cpp */,
4CE446DD18BC605C0017DF25 /* au_set.cpp */,
4CE446DE18BC605C0017DF25 /* deblocking.cpp */,
@@ -423,6 +439,7 @@
4CE4471D18BC605C0017DF25 /* property.cpp in Sources */,
4CE4471018BC605C0017DF25 /* decode_mb_aux.cpp in Sources */,
4CE4472018BC605C0017DF25 /* sample.cpp in Sources */,
6CA38DA31991CACE003EAAE0 /* svc_motion_estimation.S in Sources */,
4CE4471318BC605C0017DF25 /* encoder_data_tables.cpp in Sources */,
4C34067118C57D0400DFA14A /* pixel_neon.S in Sources */,
9AED665019469FC1009A3567 /* welsCodecTrace.cpp in Sources */,
@@ -439,6 +456,7 @@
F5BE8005196B913200ED02ED /* memory_aarch64_neon.S in Sources */,
4CBC1B83194ACBB400214D9E /* intra_pred_aarch64_neon.S in Sources */,
4CE4471718BC605C0017DF25 /* mc.cpp in Sources */,
F7E9994519EBD1E9009B1021 /* svc_set_mb_syn_cabac.cpp in Sources */,
F5617A50196A833A006E2B20 /* reconstruct_aarch64_neon.S in Sources */,
4CE4472918BC605C0017DF25 /* svc_set_mb_syn_cavlc.cpp in Sources */,
4CE4471818BC605C0017DF25 /* md.cpp in Sources */,
@@ -455,8 +473,10 @@
4CE4471218BC605C0017DF25 /* encoder.cpp in Sources */,
4CE4471618BC605C0017DF25 /* get_intra_predictor.cpp in Sources */,
4CE4472E18BC605C0017DF25 /* welsEncoderExt.cpp in Sources */,
6CA38DA51991D31A003EAAE0 /* svc_motion_estimation_aarch64_neon.S in Sources */,
4CE4471418BC605C0017DF25 /* encoder_ext.cpp in Sources */,
4C34067218C57D0400DFA14A /* reconstruct_neon.S in Sources */,
F7E9994919EBD1F8009B1021 /* set_mb_syn_cabac.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -494,7 +514,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
@@ -525,7 +545,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
@@ -555,14 +575,13 @@
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../common/inc",
"$(SRCROOT)/../../../../processing/interface",
"$(SRCROOT)/../../../../api/svc",
"$(SRCROOT)/../../../../common/arm",
"$(SRCROOT)/../../../../common/arm64",
);
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -593,13 +612,13 @@
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../common/inc",
"$(SRCROOT)/../../../../processing/interface",
"$(SRCROOT)/../../../../api/svc",
"$(SRCROOT)/../../../../common/arm",
"$(SRCROOT)/../../../../common/arm64",
);
IPHONEOS_DEPLOYMENT_TARGET = 6.1;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;

View File

@@ -0,0 +1,356 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
54D5364C196CC907005442F9 /* openh264 */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 54D5364D196CC907005442F9 /* Build configuration list for PBXAggregateTarget "openh264" */;
buildPhases = (
);
dependencies = (
54D53651196CCC40005442F9 /* PBXTargetDependency */,
54D53653196CCC40005442F9 /* PBXTargetDependency */,
54D53655196CCC40005442F9 /* PBXTargetDependency */,
54D53657196CCC40005442F9 /* PBXTargetDependency */,
);
name = openh264;
productName = openh264;
};
/* End PBXAggregateTarget section */
/* Begin PBXContainerItemProxy section */
54D53638196CC8CB005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53634196CC8CB005442F9 /* common.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 4CE443D518B722CD0017DF25;
remoteInfo = common;
};
54D5363E196CC8DA005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D5363A196CC8DA005442F9 /* welsdec.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 4CE4427918B6FC360017DF25;
remoteInfo = welsdec;
};
54D53644196CC8E6005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53640196CC8E6005442F9 /* welsenc.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 4CE4431118B6FFA00017DF25;
remoteInfo = welsenc;
};
54D5364A196CC8F3005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53646196CC8F3005442F9 /* processing.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5499477C196A3F3900BA3D87;
remoteInfo = processing;
};
54D53650196CCC40005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53646196CC8F3005442F9 /* processing.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 5499477B196A3F3900BA3D87;
remoteInfo = processing;
};
54D53652196CCC40005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53640196CC8E6005442F9 /* welsenc.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE4431018B6FFA00017DF25;
remoteInfo = welsenc;
};
54D53654196CCC40005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D5363A196CC8DA005442F9 /* welsdec.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE4427818B6FC360017DF25;
remoteInfo = welsdec;
};
54D53656196CCC40005442F9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 54D53634196CC8CB005442F9 /* common.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 4CE443D418B722CD0017DF25;
remoteInfo = common;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
54D53634196CC8CB005442F9 /* common.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = common.xcodeproj; path = ../common/common.xcodeproj; sourceTree = "<group>"; };
54D5363A196CC8DA005442F9 /* welsdec.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = welsdec.xcodeproj; path = ../dec/welsdec/welsdec.xcodeproj; sourceTree = "<group>"; };
54D53640196CC8E6005442F9 /* welsenc.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = welsenc.xcodeproj; path = ../enc/welsenc/welsenc.xcodeproj; sourceTree = "<group>"; };
54D53646196CC8F3005442F9 /* processing.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = processing.xcodeproj; path = ../processing/processing.xcodeproj; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
54D53602196CC76D005442F9 = {
isa = PBXGroup;
children = (
54D5360D196CC76D005442F9 /* Frameworks */,
54D5360C196CC76D005442F9 /* Products */,
);
sourceTree = "<group>";
};
54D5360C196CC76D005442F9 /* Products */ = {
isa = PBXGroup;
children = (
);
name = Products;
sourceTree = "<group>";
};
54D5360D196CC76D005442F9 /* Frameworks */ = {
isa = PBXGroup;
children = (
54D53646196CC8F3005442F9 /* processing.xcodeproj */,
54D53640196CC8E6005442F9 /* welsenc.xcodeproj */,
54D5363A196CC8DA005442F9 /* welsdec.xcodeproj */,
54D53634196CC8CB005442F9 /* common.xcodeproj */,
);
name = Frameworks;
sourceTree = "<group>";
};
54D53635196CC8CB005442F9 /* Products */ = {
isa = PBXGroup;
children = (
54D53639196CC8CB005442F9 /* libcommon.a */,
);
name = Products;
sourceTree = "<group>";
};
54D5363B196CC8DA005442F9 /* Products */ = {
isa = PBXGroup;
children = (
54D5363F196CC8DA005442F9 /* libwelsdec.a */,
);
name = Products;
sourceTree = "<group>";
};
54D53641196CC8E6005442F9 /* Products */ = {
isa = PBXGroup;
children = (
54D53645196CC8E6005442F9 /* libwelsenc.a */,
);
name = Products;
sourceTree = "<group>";
};
54D53647196CC8F3005442F9 /* Products */ = {
isa = PBXGroup;
children = (
54D5364B196CC8F3005442F9 /* libprocessing.a */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXProject section */
54D53603196CC76D005442F9 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
ORGANIZATIONNAME = com.cisco;
};
buildConfigurationList = 54D53606196CC76D005442F9 /* Build configuration list for PBXProject "openh264" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 54D53602196CC76D005442F9;
productRefGroup = 54D5360C196CC76D005442F9 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 54D53635196CC8CB005442F9 /* Products */;
ProjectRef = 54D53634196CC8CB005442F9 /* common.xcodeproj */;
},
{
ProductGroup = 54D53647196CC8F3005442F9 /* Products */;
ProjectRef = 54D53646196CC8F3005442F9 /* processing.xcodeproj */;
},
{
ProductGroup = 54D5363B196CC8DA005442F9 /* Products */;
ProjectRef = 54D5363A196CC8DA005442F9 /* welsdec.xcodeproj */;
},
{
ProductGroup = 54D53641196CC8E6005442F9 /* Products */;
ProjectRef = 54D53640196CC8E6005442F9 /* welsenc.xcodeproj */;
},
);
projectRoot = "";
targets = (
54D5364C196CC907005442F9 /* openh264 */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
54D53639196CC8CB005442F9 /* libcommon.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libcommon.a;
remoteRef = 54D53638196CC8CB005442F9 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
54D5363F196CC8DA005442F9 /* libwelsdec.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libwelsdec.a;
remoteRef = 54D5363E196CC8DA005442F9 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
54D53645196CC8E6005442F9 /* libwelsenc.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libwelsenc.a;
remoteRef = 54D53644196CC8E6005442F9 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
54D5364B196CC8F3005442F9 /* libprocessing.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libprocessing.a;
remoteRef = 54D5364A196CC8F3005442F9 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXTargetDependency section */
54D53651196CCC40005442F9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = processing;
targetProxy = 54D53650196CCC40005442F9 /* PBXContainerItemProxy */;
};
54D53653196CCC40005442F9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = welsenc;
targetProxy = 54D53652196CCC40005442F9 /* PBXContainerItemProxy */;
};
54D53655196CCC40005442F9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = welsdec;
targetProxy = 54D53654196CCC40005442F9 /* PBXContainerItemProxy */;
};
54D53657196CCC40005442F9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = common;
targetProxy = 54D53656196CCC40005442F9 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
54D5362C196CC76D005442F9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
};
name = Debug;
};
54D5362D196CC76D005442F9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
54D5364E196CC907005442F9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
54D5364F196CC907005442F9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
54D53606196CC76D005442F9 /* Build configuration list for PBXProject "openh264" */ = {
isa = XCConfigurationList;
buildConfigurations = (
54D5362C196CC76D005442F9 /* Debug */,
54D5362D196CC76D005442F9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
54D5364D196CC907005442F9 /* Build configuration list for PBXAggregateTarget "openh264" */ = {
isa = XCConfigurationList;
buildConfigurations = (
54D5364E196CC907005442F9 /* Debug */,
54D5364F196CC907005442F9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 54D53603196CC76D005442F9 /* Project object */;
}

View File

@@ -0,0 +1,542 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
4CC6094F197E009D00BE8B8B /* down_sample_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6094E197E009D00BE8B8B /* down_sample_aarch64_neon.S */; };
4CC6095A1980F34F00BE8B8B /* vaa_calc_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 4CC609591980F34F00BE8B8B /* vaa_calc_aarch64_neon.S */; };
4CD0FE36199082AD00375C9A /* pixel_sad_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 4CD0FE35199082AD00375C9A /* pixel_sad_aarch64_neon.S */; };
54994780196A3F3900BA3D87 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5499477F196A3F3900BA3D87 /* Foundation.framework */; };
549947DF196A3FB400BA3D87 /* AdaptiveQuantization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947A9196A3FB400BA3D87 /* AdaptiveQuantization.cpp */; };
549947E0196A3FB400BA3D87 /* adaptive_quantization.S in Sources */ = {isa = PBXBuildFile; fileRef = 549947AC196A3FB400BA3D87 /* adaptive_quantization.S */; };
549947E1196A3FB400BA3D87 /* down_sample_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 549947AD196A3FB400BA3D87 /* down_sample_neon.S */; };
549947E2196A3FB400BA3D87 /* pixel_sad_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 549947AE196A3FB400BA3D87 /* pixel_sad_neon.S */; };
549947E3196A3FB400BA3D87 /* vaa_calc_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 549947AF196A3FB400BA3D87 /* vaa_calc_neon.S */; };
549947E4196A3FB400BA3D87 /* BackgroundDetection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947B1196A3FB400BA3D87 /* BackgroundDetection.cpp */; };
549947E6196A3FB400BA3D87 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947B6196A3FB400BA3D87 /* memory.cpp */; };
549947E7196A3FB400BA3D87 /* WelsFrameWork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947BB196A3FB400BA3D87 /* WelsFrameWork.cpp */; };
549947E8196A3FB400BA3D87 /* WelsFrameWorkEx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947BD196A3FB400BA3D87 /* WelsFrameWorkEx.cpp */; };
549947E9196A3FB400BA3D87 /* ComplexityAnalysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947C1196A3FB400BA3D87 /* ComplexityAnalysis.cpp */; };
549947EA196A3FB400BA3D87 /* denoise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947C4196A3FB400BA3D87 /* denoise.cpp */; };
549947EB196A3FB400BA3D87 /* denoise_filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947C6196A3FB400BA3D87 /* denoise_filter.cpp */; };
549947EC196A3FB400BA3D87 /* downsample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947C8196A3FB400BA3D87 /* downsample.cpp */; };
549947ED196A3FB400BA3D87 /* downsamplefuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947CA196A3FB400BA3D87 /* downsamplefuncs.cpp */; };
549947EE196A3FB400BA3D87 /* imagerotate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947CC196A3FB400BA3D87 /* imagerotate.cpp */; };
549947EF196A3FB400BA3D87 /* imagerotatefuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947CE196A3FB400BA3D87 /* imagerotatefuncs.cpp */; };
549947F0196A3FB400BA3D87 /* SceneChangeDetection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947D0196A3FB400BA3D87 /* SceneChangeDetection.cpp */; };
549947F1196A3FB400BA3D87 /* ScrollDetection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947D3196A3FB400BA3D87 /* ScrollDetection.cpp */; };
549947F2196A3FB400BA3D87 /* ScrollDetectionFuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947D5196A3FB400BA3D87 /* ScrollDetectionFuncs.cpp */; };
549947F3196A3FB400BA3D87 /* vaacalcfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947D8196A3FB400BA3D87 /* vaacalcfuncs.cpp */; };
549947F4196A3FB400BA3D87 /* vaacalculation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 549947D9196A3FB400BA3D87 /* vaacalculation.cpp */; };
6C749B78197E2A2000A111F9 /* adaptive_quantization_aarch64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = 6C749B77197E2A2000A111F9 /* adaptive_quantization_aarch64_neon.S */; };
F791965B19D3BF6B00F60C6B /* intra_pred_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F791965A19D3BF6B00F60C6B /* intra_pred_common.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
5499477A196A3F3900BA3D87 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "include/$(PRODUCT_NAME)";
dstSubfolderSpec = 16;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
4CC6094E197E009D00BE8B8B /* down_sample_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = down_sample_aarch64_neon.S; path = arm64/down_sample_aarch64_neon.S; sourceTree = "<group>"; };
4CC609591980F34F00BE8B8B /* vaa_calc_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = vaa_calc_aarch64_neon.S; path = arm64/vaa_calc_aarch64_neon.S; sourceTree = "<group>"; };
4CD0FE35199082AD00375C9A /* pixel_sad_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = pixel_sad_aarch64_neon.S; path = arm64/pixel_sad_aarch64_neon.S; sourceTree = "<group>"; };
5499477C196A3F3900BA3D87 /* libprocessing.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libprocessing.a; sourceTree = BUILT_PRODUCTS_DIR; };
5499477F196A3F3900BA3D87 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
54994790196A3F3900BA3D87 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
549947A6196A3FB400BA3D87 /* IWelsVP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IWelsVP.h; sourceTree = "<group>"; };
549947A9196A3FB400BA3D87 /* AdaptiveQuantization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AdaptiveQuantization.cpp; sourceTree = "<group>"; };
549947AA196A3FB400BA3D87 /* AdaptiveQuantization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdaptiveQuantization.h; sourceTree = "<group>"; };
549947AC196A3FB400BA3D87 /* adaptive_quantization.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = adaptive_quantization.S; sourceTree = "<group>"; };
549947AD196A3FB400BA3D87 /* down_sample_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = down_sample_neon.S; sourceTree = "<group>"; };
549947AE196A3FB400BA3D87 /* pixel_sad_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = pixel_sad_neon.S; sourceTree = "<group>"; };
549947AF196A3FB400BA3D87 /* vaa_calc_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = vaa_calc_neon.S; sourceTree = "<group>"; };
549947B1196A3FB400BA3D87 /* BackgroundDetection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundDetection.cpp; sourceTree = "<group>"; };
549947B2196A3FB400BA3D87 /* BackgroundDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackgroundDetection.h; sourceTree = "<group>"; };
549947B5196A3FB400BA3D87 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
549947B6196A3FB400BA3D87 /* memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = "<group>"; };
549947B7196A3FB400BA3D87 /* memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = "<group>"; };
549947B8196A3FB400BA3D87 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; };
549947B9196A3FB400BA3D87 /* typedef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedef.h; sourceTree = "<group>"; };
549947BA196A3FB400BA3D87 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; };
549947BB196A3FB400BA3D87 /* WelsFrameWork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WelsFrameWork.cpp; sourceTree = "<group>"; };
549947BC196A3FB400BA3D87 /* WelsFrameWork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WelsFrameWork.h; sourceTree = "<group>"; };
549947BD196A3FB400BA3D87 /* WelsFrameWorkEx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WelsFrameWorkEx.cpp; sourceTree = "<group>"; };
549947BE196A3FB400BA3D87 /* WelsVP.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WelsVP.def; sourceTree = "<group>"; };
549947BF196A3FB400BA3D87 /* WelsVP.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WelsVP.rc; sourceTree = "<group>"; };
549947C1196A3FB400BA3D87 /* ComplexityAnalysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexityAnalysis.cpp; sourceTree = "<group>"; };
549947C2196A3FB400BA3D87 /* ComplexityAnalysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComplexityAnalysis.h; sourceTree = "<group>"; };
549947C4196A3FB400BA3D87 /* denoise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = denoise.cpp; sourceTree = "<group>"; };
549947C5196A3FB400BA3D87 /* denoise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = denoise.h; sourceTree = "<group>"; };
549947C6196A3FB400BA3D87 /* denoise_filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = denoise_filter.cpp; sourceTree = "<group>"; };
549947C8196A3FB400BA3D87 /* downsample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = downsample.cpp; sourceTree = "<group>"; };
549947C9196A3FB400BA3D87 /* downsample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = downsample.h; sourceTree = "<group>"; };
549947CA196A3FB400BA3D87 /* downsamplefuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = downsamplefuncs.cpp; sourceTree = "<group>"; };
549947CC196A3FB400BA3D87 /* imagerotate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imagerotate.cpp; sourceTree = "<group>"; };
549947CD196A3FB400BA3D87 /* imagerotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imagerotate.h; sourceTree = "<group>"; };
549947CE196A3FB400BA3D87 /* imagerotatefuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imagerotatefuncs.cpp; sourceTree = "<group>"; };
549947D0196A3FB400BA3D87 /* SceneChangeDetection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneChangeDetection.cpp; sourceTree = "<group>"; };
549947D1196A3FB400BA3D87 /* SceneChangeDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneChangeDetection.h; sourceTree = "<group>"; };
549947D3196A3FB400BA3D87 /* ScrollDetection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollDetection.cpp; sourceTree = "<group>"; };
549947D4196A3FB400BA3D87 /* ScrollDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollDetection.h; sourceTree = "<group>"; };
549947D5196A3FB400BA3D87 /* ScrollDetectionFuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollDetectionFuncs.cpp; sourceTree = "<group>"; };
549947D6196A3FB400BA3D87 /* ScrollDetectionFuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollDetectionFuncs.h; sourceTree = "<group>"; };
549947D8196A3FB400BA3D87 /* vaacalcfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vaacalcfuncs.cpp; sourceTree = "<group>"; };
549947D9196A3FB400BA3D87 /* vaacalculation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vaacalculation.cpp; sourceTree = "<group>"; };
549947DA196A3FB400BA3D87 /* vaacalculation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vaacalculation.h; sourceTree = "<group>"; };
6C749B77197E2A2000A111F9 /* adaptive_quantization_aarch64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = adaptive_quantization_aarch64_neon.S; path = arm64/adaptive_quantization_aarch64_neon.S; sourceTree = "<group>"; };
F791965A19D3BF6B00F60C6B /* intra_pred_common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = intra_pred_common.cpp; path = ../../../common/src/intra_pred_common.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
54994779196A3F3900BA3D87 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
54994780196A3F3900BA3D87 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
4CC6094D197E008B00BE8B8B /* arm64 */ = {
isa = PBXGroup;
children = (
4CD0FE35199082AD00375C9A /* pixel_sad_aarch64_neon.S */,
6C749B77197E2A2000A111F9 /* adaptive_quantization_aarch64_neon.S */,
4CC609591980F34F00BE8B8B /* vaa_calc_aarch64_neon.S */,
4CC6094E197E009D00BE8B8B /* down_sample_aarch64_neon.S */,
);
name = arm64;
sourceTree = "<group>";
};
54994773196A3F3900BA3D87 = {
isa = PBXGroup;
children = (
549947A5196A3FB400BA3D87 /* interface */,
549947A7196A3FB400BA3D87 /* src */,
5499477E196A3F3900BA3D87 /* Frameworks */,
5499477D196A3F3900BA3D87 /* Products */,
);
sourceTree = "<group>";
};
5499477D196A3F3900BA3D87 /* Products */ = {
isa = PBXGroup;
children = (
5499477C196A3F3900BA3D87 /* libprocessing.a */,
);
name = Products;
sourceTree = "<group>";
};
5499477E196A3F3900BA3D87 /* Frameworks */ = {
isa = PBXGroup;
children = (
5499477F196A3F3900BA3D87 /* Foundation.framework */,
54994790196A3F3900BA3D87 /* UIKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
549947A5196A3FB400BA3D87 /* interface */ = {
isa = PBXGroup;
children = (
549947A6196A3FB400BA3D87 /* IWelsVP.h */,
);
name = interface;
path = ../../../processing/interface;
sourceTree = "<group>";
};
549947A7196A3FB400BA3D87 /* src */ = {
isa = PBXGroup;
children = (
4CC6094D197E008B00BE8B8B /* arm64 */,
549947A8196A3FB400BA3D87 /* adaptivequantization */,
549947AB196A3FB400BA3D87 /* arm */,
549947B0196A3FB400BA3D87 /* backgrounddetection */,
549947B3196A3FB400BA3D87 /* common */,
549947C0196A3FB400BA3D87 /* complexityanalysis */,
549947C3196A3FB400BA3D87 /* denoise */,
549947C7196A3FB400BA3D87 /* downsample */,
549947CB196A3FB400BA3D87 /* imagerotate */,
549947CF196A3FB400BA3D87 /* scenechangedetection */,
549947D2196A3FB400BA3D87 /* scrolldetection */,
549947D7196A3FB400BA3D87 /* vaacalc */,
);
name = src;
path = ../../../processing/src;
sourceTree = "<group>";
};
549947A8196A3FB400BA3D87 /* adaptivequantization */ = {
isa = PBXGroup;
children = (
549947A9196A3FB400BA3D87 /* AdaptiveQuantization.cpp */,
549947AA196A3FB400BA3D87 /* AdaptiveQuantization.h */,
);
path = adaptivequantization;
sourceTree = "<group>";
};
549947AB196A3FB400BA3D87 /* arm */ = {
isa = PBXGroup;
children = (
549947AC196A3FB400BA3D87 /* adaptive_quantization.S */,
549947AD196A3FB400BA3D87 /* down_sample_neon.S */,
549947AE196A3FB400BA3D87 /* pixel_sad_neon.S */,
549947AF196A3FB400BA3D87 /* vaa_calc_neon.S */,
);
path = arm;
sourceTree = "<group>";
};
549947B0196A3FB400BA3D87 /* backgrounddetection */ = {
isa = PBXGroup;
children = (
549947B1196A3FB400BA3D87 /* BackgroundDetection.cpp */,
549947B2196A3FB400BA3D87 /* BackgroundDetection.h */,
);
path = backgrounddetection;
sourceTree = "<group>";
};
549947B3196A3FB400BA3D87 /* common */ = {
isa = PBXGroup;
children = (
F791965A19D3BF6B00F60C6B /* intra_pred_common.cpp */,
549947B5196A3FB400BA3D87 /* common.h */,
549947B6196A3FB400BA3D87 /* memory.cpp */,
549947B7196A3FB400BA3D87 /* memory.h */,
549947B8196A3FB400BA3D87 /* resource.h */,
549947B9196A3FB400BA3D87 /* typedef.h */,
549947BA196A3FB400BA3D87 /* util.h */,
549947BB196A3FB400BA3D87 /* WelsFrameWork.cpp */,
549947BC196A3FB400BA3D87 /* WelsFrameWork.h */,
549947BD196A3FB400BA3D87 /* WelsFrameWorkEx.cpp */,
549947BE196A3FB400BA3D87 /* WelsVP.def */,
549947BF196A3FB400BA3D87 /* WelsVP.rc */,
);
path = common;
sourceTree = "<group>";
};
549947C0196A3FB400BA3D87 /* complexityanalysis */ = {
isa = PBXGroup;
children = (
549947C1196A3FB400BA3D87 /* ComplexityAnalysis.cpp */,
549947C2196A3FB400BA3D87 /* ComplexityAnalysis.h */,
);
path = complexityanalysis;
sourceTree = "<group>";
};
549947C3196A3FB400BA3D87 /* denoise */ = {
isa = PBXGroup;
children = (
549947C4196A3FB400BA3D87 /* denoise.cpp */,
549947C5196A3FB400BA3D87 /* denoise.h */,
549947C6196A3FB400BA3D87 /* denoise_filter.cpp */,
);
path = denoise;
sourceTree = "<group>";
};
549947C7196A3FB400BA3D87 /* downsample */ = {
isa = PBXGroup;
children = (
549947C8196A3FB400BA3D87 /* downsample.cpp */,
549947C9196A3FB400BA3D87 /* downsample.h */,
549947CA196A3FB400BA3D87 /* downsamplefuncs.cpp */,
);
path = downsample;
sourceTree = "<group>";
};
549947CB196A3FB400BA3D87 /* imagerotate */ = {
isa = PBXGroup;
children = (
549947CC196A3FB400BA3D87 /* imagerotate.cpp */,
549947CD196A3FB400BA3D87 /* imagerotate.h */,
549947CE196A3FB400BA3D87 /* imagerotatefuncs.cpp */,
);
path = imagerotate;
sourceTree = "<group>";
};
549947CF196A3FB400BA3D87 /* scenechangedetection */ = {
isa = PBXGroup;
children = (
549947D0196A3FB400BA3D87 /* SceneChangeDetection.cpp */,
549947D1196A3FB400BA3D87 /* SceneChangeDetection.h */,
);
path = scenechangedetection;
sourceTree = "<group>";
};
549947D2196A3FB400BA3D87 /* scrolldetection */ = {
isa = PBXGroup;
children = (
549947D3196A3FB400BA3D87 /* ScrollDetection.cpp */,
549947D4196A3FB400BA3D87 /* ScrollDetection.h */,
549947D5196A3FB400BA3D87 /* ScrollDetectionFuncs.cpp */,
549947D6196A3FB400BA3D87 /* ScrollDetectionFuncs.h */,
);
path = scrolldetection;
sourceTree = "<group>";
};
549947D7196A3FB400BA3D87 /* vaacalc */ = {
isa = PBXGroup;
children = (
549947D8196A3FB400BA3D87 /* vaacalcfuncs.cpp */,
549947D9196A3FB400BA3D87 /* vaacalculation.cpp */,
549947DA196A3FB400BA3D87 /* vaacalculation.h */,
);
path = vaacalc;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
5499477B196A3F3900BA3D87 /* processing */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5499479F196A3F3900BA3D87 /* Build configuration list for PBXNativeTarget "processing" */;
buildPhases = (
54994778196A3F3900BA3D87 /* Sources */,
54994779196A3F3900BA3D87 /* Frameworks */,
5499477A196A3F3900BA3D87 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = processing;
productName = processing;
productReference = 5499477C196A3F3900BA3D87 /* libprocessing.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
54994774196A3F3900BA3D87 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
ORGANIZATIONNAME = com.cisco;
};
buildConfigurationList = 54994777196A3F3900BA3D87 /* Build configuration list for PBXProject "processing" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 54994773196A3F3900BA3D87;
productRefGroup = 5499477D196A3F3900BA3D87 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
5499477B196A3F3900BA3D87 /* processing */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
54994778196A3F3900BA3D87 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6C749B78197E2A2000A111F9 /* adaptive_quantization_aarch64_neon.S in Sources */,
549947F4196A3FB400BA3D87 /* vaacalculation.cpp in Sources */,
549947E9196A3FB400BA3D87 /* ComplexityAnalysis.cpp in Sources */,
549947E3196A3FB400BA3D87 /* vaa_calc_neon.S in Sources */,
549947EE196A3FB400BA3D87 /* imagerotate.cpp in Sources */,
549947EA196A3FB400BA3D87 /* denoise.cpp in Sources */,
549947E7196A3FB400BA3D87 /* WelsFrameWork.cpp in Sources */,
549947F1196A3FB400BA3D87 /* ScrollDetection.cpp in Sources */,
549947E4196A3FB400BA3D87 /* BackgroundDetection.cpp in Sources */,
549947F3196A3FB400BA3D87 /* vaacalcfuncs.cpp in Sources */,
4CD0FE36199082AD00375C9A /* pixel_sad_aarch64_neon.S in Sources */,
549947E0196A3FB400BA3D87 /* adaptive_quantization.S in Sources */,
549947EB196A3FB400BA3D87 /* denoise_filter.cpp in Sources */,
549947ED196A3FB400BA3D87 /* downsamplefuncs.cpp in Sources */,
549947E6196A3FB400BA3D87 /* memory.cpp in Sources */,
549947E2196A3FB400BA3D87 /* pixel_sad_neon.S in Sources */,
549947F0196A3FB400BA3D87 /* SceneChangeDetection.cpp in Sources */,
4CC6094F197E009D00BE8B8B /* down_sample_aarch64_neon.S in Sources */,
4CC6095A1980F34F00BE8B8B /* vaa_calc_aarch64_neon.S in Sources */,
549947F2196A3FB400BA3D87 /* ScrollDetectionFuncs.cpp in Sources */,
F791965B19D3BF6B00F60C6B /* intra_pred_common.cpp in Sources */,
549947EF196A3FB400BA3D87 /* imagerotatefuncs.cpp in Sources */,
549947DF196A3FB400BA3D87 /* AdaptiveQuantization.cpp in Sources */,
549947EC196A3FB400BA3D87 /* downsample.cpp in Sources */,
549947E8196A3FB400BA3D87 /* WelsFrameWorkEx.cpp in Sources */,
549947E1196A3FB400BA3D87 /* down_sample_neon.S in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
5499479D196A3F3900BA3D87 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
"GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
5499479E196A3F3900BA3D87 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
549947A0196A3F3900BA3D87 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DSTROOT = /tmp/processing.dst;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=arm64]" = (
APPLE_IOS,
HAVE_NEON_AARCH64,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=armv7]" = (
APPLE_IOS,
HAVE_NEON,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=armv7s]" = (
APPLE_IOS,
HAVE_NEON,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = APPLE_IOS;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../processing/interface",
"$(SRCROOT)/../../../processing/src/common",
"$(SRCROOT)/../../../common/inc",
"$(SRCROOT)/../../../common/arm64",
"$(SRCROOT)/../../../common/arm",
);
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
549947A1196A3F3900BA3D87 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DSTROOT = /tmp/processing.dst;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=arm64]" = (
APPLE_IOS,
HAVE_NEON_AARCH64,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=armv7]" = (
APPLE_IOS,
HAVE_NEON,
);
"GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*][arch=armv7s]" = (
APPLE_IOS,
HAVE_NEON,
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../processing/interface",
"$(SRCROOT)/../../../processing/src/common",
"$(SRCROOT)/../../../common/inc",
"$(SRCROOT)/../../../common/arm64",
"$(SRCROOT)/../../../common/arm",
);
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
54994777196A3F3900BA3D87 /* Build configuration list for PBXProject "processing" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5499479D196A3F3900BA3D87 /* Debug */,
5499479E196A3F3900BA3D87 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5499479F196A3F3900BA3D87 /* Build configuration list for PBXNativeTarget "processing" */ = {
isa = XCConfigurationList;
buildConfigurations = (
549947A0196A3F3900BA3D87 /* Debug */,
549947A1196A3F3900BA3D87 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 54994774196A3F3900BA3D87 /* Project object */;
}

View File

@@ -3,6 +3,9 @@
*.ncb
*.suo
Win32
x64
# Files generated by upgrading the project files
*.vcxproj*
Backup

View File

@@ -23,8 +23,8 @@
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\decoder\core\release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -59,12 +59,8 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\core\release/WelsDecCore.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\core\release/"
ObjectFile=".\..\..\..\obj\decoder\core\release/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\core\release/"
WarningLevel="3"
DebugInformationFormat="0"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -89,7 +85,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Release/WelsDecCore.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -100,8 +95,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\decoder\core\release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -137,12 +132,8 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\core\release/WelsDecCore.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\core\release/"
ObjectFile=".\..\..\..\obj\decoder\core\release/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\core\release/"
WarningLevel="3"
DebugInformationFormat="0"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -167,7 +158,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Release/WelsDecCore.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -178,8 +168,8 @@
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\decoder\core\debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -212,10 +202,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\core\debug/WelsDecCore.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\core\debug/"
ObjectFile=".\..\..\..\obj\decoder\core\debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\core\debug/"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -242,7 +228,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Debug/WelsDecCore.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -253,8 +238,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\decoder\core\debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -288,10 +273,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\core\debug/WelsDecCore.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\core\debug/"
ObjectFile=".\..\..\..\obj\decoder\core\debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\core\debug/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -318,7 +299,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Debug/WelsDecCore.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -675,6 +655,10 @@
RelativePath="..\..\..\decoder\core\inc\bit_stream.h"
>
</File>
<File
RelativePath="..\..\..\decoder\core\inc\cabac_decoder.h"
>
</File>
<File
RelativePath="..\..\..\common\inc\copy_mb.h"
>
@@ -795,6 +779,10 @@
RelativePath="..\..\..\decoder\core\inc\parameter_sets.h"
>
</File>
<File
RelativePath="..\..\..\decoder\core\inc\parse_mb_syn_cabac.h"
>
</File>
<File
RelativePath="..\..\..\decoder\core\inc\parse_mb_syn_cavlc.h"
>
@@ -852,6 +840,10 @@
RelativePath="..\..\..\decoder\core\src\bit_stream.cpp"
>
</File>
<File
RelativePath="..\..\..\decoder\core\src\cabac_decoder.cpp"
>
</File>
<File
RelativePath="..\..\..\common\src\common_tables.cpp"
>
@@ -932,6 +924,10 @@
RelativePath="..\..\..\decoder\core\src\mv_pred.cpp"
>
</File>
<File
RelativePath="..\..\..\decoder\core\src\parse_mb_syn_cabac.cpp"
>
</File>
<File
RelativePath="..\..\..\decoder\core\src\parse_mb_syn_cavlc.cpp"
>

View File

@@ -20,8 +20,8 @@
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\decoder\plus\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -43,11 +43,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
TargetEnvironment="1"
TypeLibraryName=".\..\..\..\..\..\bin\win32\Release/WelsDecPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -58,10 +53,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\plus\Release/WelsDecPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\plus\Release/"
ObjectFile=".\..\..\..\obj\decoder\plus\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\plus\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -78,15 +69,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies=".\..\..\..\..\bin\win32\Release\welsdcore.lib"
AdditionalDependencies="$(OutDir)\welsdcore.lib"
OutputFile="$(OutDir)\welsdec.dll"
LinkIncremental="1"
AdditionalLibraryDirectories=".\..\..\..\libs\Release\"
ModuleDefinitionFile="..\..\..\decoder\plus\src\wels_dec_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsdec.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\welsdec.map"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsdec.lib"
@@ -103,7 +90,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Release/WelsDecPlus.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -117,8 +103,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\decoder\plus\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -140,11 +126,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\win32\Release/WelsDecPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -155,10 +136,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\plus\Release/WelsDecPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\plus\Release/"
ObjectFile=".\..\..\..\obj\decoder\plus\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\plus\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -175,15 +152,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies=".\..\..\..\..\bin\win64\Release\welsdcore.lib"
AdditionalDependencies="$(OutDir)\welsdcore.lib"
OutputFile="$(OutDir)\welsdec.dll"
LinkIncremental="1"
AdditionalLibraryDirectories=".\..\..\..\libs\Release\"
ModuleDefinitionFile="..\..\..\decoder\plus\src\wels_dec_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsdec.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\welsdec.map"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsdec.lib"
@@ -200,7 +173,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Release/WelsDecPlus.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -214,8 +186,8 @@
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\decoder\plus\debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -236,11 +208,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
TargetEnvironment="1"
TypeLibraryName=".\..\..\..\..\..\bin\win32\Debug/WelsDecPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -250,10 +217,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\plus\debug/WelsDecPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\plus\debug/"
ObjectFile=".\..\..\..\obj\decoder\plus\debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\plus\debug/"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -270,13 +233,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies=".\..\..\..\..\bin\win32\Debug\welsdcore.lib"
AdditionalDependencies="$(OutDir)\welsdcore.lib"
OutputFile="$(OutDir)\welsdec.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\libs\debug"
ModuleDefinitionFile="..\..\..\decoder\plus\src\wels_dec_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsdec.pdb"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsdec.lib"
@@ -293,7 +254,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Debug/WelsDecPlus.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -307,8 +267,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\decoder\plus\debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -329,11 +289,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\win32\Debug/WelsDecPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -343,10 +298,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decoder\plus\debug/WelsDecPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\decoder\plus\debug/"
ObjectFile=".\..\..\..\obj\decoder\plus\debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decoder\plus\debug/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -363,13 +314,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies=".\..\..\..\..\bin\win64\Debug\welsdcore.lib"
AdditionalDependencies="$(OutDir)\welsdcore.lib"
OutputFile="$(OutDir)\welsdec.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\libs\debug"
ModuleDefinitionFile="..\..\..\decoder\plus\src\wels_dec_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsdec.pdb"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsdec.lib"
@@ -386,7 +335,6 @@
/>
<Tool
Name="VCBscMakeTool"
OutputFile=".\..\..\..\..\bin\win32\Debug/WelsDecPlus.bsc"
/>
<Tool
Name="VCFxCopTool"

View File

@@ -20,8 +20,8 @@
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\decConsole\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -42,8 +42,6 @@
/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\..\..\..\..\bin\win32\Release/decConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -54,11 +52,8 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decConsole\Release/decConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\decConsole\Release/"
ObjectFile=".\..\..\..\obj\decConsole\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\decConsole\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -76,9 +71,7 @@
AdditionalDependencies="$(OutDir)\welsdec.lib"
OutputFile="$(OutDir)\decConsole.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\..\bin\win32"
ProgramDatabaseFile="$(OutDir)\decConsole.pdb"
GenerateMapFile="false"
GenerateDebugInformation="true"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -109,8 +102,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\decConsole\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -131,9 +124,6 @@
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\bin\win32\Release/decConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -144,11 +134,8 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\decConsole\Release/decConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\decConsole\Release/"
ObjectFile=".\..\..\..\obj\decConsole\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\decConsole\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -166,9 +153,7 @@
AdditionalDependencies="$(OutDir)\welsdec.lib"
OutputFile="$(OutDir)\decConsole.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\..\bin\win64"
ProgramDatabaseFile="$(OutDir)\decConsole.pdb"
GenerateMapFile="false"
GenerateDebugInformation="true"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -199,8 +184,8 @@
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\decConsole\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -221,8 +206,6 @@
/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\..\..\..\..\bin\win32\Debug/decConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -232,11 +215,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decConsole\Debug/decConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\decConsole\Debug/"
ObjectFile=".\..\..\..\obj\decConsole\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decConsole\Debug/"
BrowseInformation="1"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -256,9 +234,7 @@
AdditionalDependencies="$(OutDir)\welsdec.lib"
OutputFile="$(OutDir)\decConsoled.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\..\bin\win32"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\decConsoled.pdb"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -289,8 +265,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\decConsole\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -311,9 +287,6 @@
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\bin\win32\Debug/decConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -323,11 +296,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\decConsole\Debug/decConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\decConsole\Debug/"
ObjectFile=".\..\..\..\obj\decConsole\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\decConsole\Debug/"
BrowseInformation="1"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -347,9 +315,7 @@
AdditionalDependencies="$(OutDir)\welsdec.lib"
OutputFile="$(OutDir)\decConsoled.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\..\bin\win64"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\decConsoled.pdb"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"

View File

@@ -23,8 +23,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\encoder\core\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -57,10 +57,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\core\Debug/WelsEncCore.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\core\Debug/"
ObjectFile=".\..\..\..\obj\encoder\core\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\core\Debug/"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -99,8 +95,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\encoder\core\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -134,10 +130,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\core\Debug/WelsEncCore.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\core\Debug/"
ObjectFile=".\..\..\..\obj\encoder\core\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\core\Debug/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -176,8 +168,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\encoder\core\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -213,10 +205,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\core\Release/WelsEncCore.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\core\Release/"
ObjectFile=".\..\..\..\obj\encoder\core\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\core\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -255,8 +243,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\encoder\core\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -293,10 +281,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\core\Release/WelsEncCore.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\core\Release/"
ObjectFile=".\..\..\..\obj\encoder\core\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\core\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -397,6 +381,10 @@
RelativePath="..\..\..\encoder\core\src\get_intra_predictor.cpp"
>
</File>
<File
RelativePath="..\..\..\common\src\intra_pred_common.cpp"
>
</File>
<File
RelativePath="..\..\..\encoder\core\src\mc.cpp"
>
@@ -441,6 +429,10 @@
RelativePath="..\..\..\encoder\core\src\sample.cpp"
>
</File>
<File
RelativePath="..\..\..\encoder\core\src\set_mb_syn_cabac.cpp"
>
</File>
<File
RelativePath="..\..\..\encoder\core\src\set_mb_syn_cavlc.cpp"
>
@@ -473,6 +465,10 @@
RelativePath="..\..\..\encoder\core\src\svc_motion_estimate.cpp"
>
</File>
<File
RelativePath="..\..\..\encoder\core\src\svc_set_mb_syn_cabac.cpp"
>
</File>
<File
RelativePath="..\..\..\encoder\core\src\svc_set_mb_syn_cavlc.cpp"
>
@@ -638,6 +634,10 @@
RelativePath="..\..\..\encoder\core\inc\sample.h"
>
</File>
<File
RelativePath="..\..\..\encoder\core\inc\set_mb_syn_cabac.h"
>
</File>
<File
RelativePath="..\..\..\encoder\core\inc\set_mb_syn_cavlc.h"
>
@@ -690,6 +690,10 @@
RelativePath="..\..\..\encoder\core\inc\svc_motion_estimate.h"
>
</File>
<File
RelativePath="..\..\..\encoder\core\inc\svc_set_mb_syn.h"
>
</File>
<File
RelativePath="..\..\..\encoder\core\inc\svc_set_mb_syn_cavlc.h"
>
@@ -743,7 +747,7 @@
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
@@ -761,7 +765,7 @@
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
@@ -783,7 +787,7 @@
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
@@ -975,6 +979,46 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\common\x86\intra_pred_com.asm"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win64 -DWIN64 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win64 -DWIN64 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\encoder\core\x86\matrix_transpose.asm"
>
@@ -1343,7 +1387,7 @@
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
@@ -1361,7 +1405,7 @@
>
<Tool
Name="VCCustomBuildTool"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
CommandLine="nasm -I$(InputDir) -I$(InputDir)/../../../common/x86/ -f win32 -DPREFIX -DX86_32 -o $(IntDir)\$(InputName).obj $(InputPath)&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>

View File

@@ -20,8 +20,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\encoder\plus\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -42,11 +42,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
TargetEnvironment="1"
TypeLibraryName=".\..\..\..\..\..\bin\Debug/WelsEncPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -56,10 +51,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\plus\Debug/WelsEncPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\plus\Debug/"
ObjectFile=".\..\..\..\obj\encoder\plus\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\plus\Debug/"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -79,12 +70,8 @@
AdditionalDependencies="$(OutDir)\welsecore.lib $(OutDir)\welsvp.lib"
OutputFile="$(OutDir)\welsenc.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\..\libs"
ModuleDefinitionFile="..\..\..\encoder\plus\src\wels_enc_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsenc.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\welsenc.map"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsenc.lib"
@@ -115,8 +102,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\encoder\plus\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -137,11 +124,6 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\Debug/WelsEncPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -151,10 +133,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\plus\Debug/WelsEncPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\plus\Debug/"
ObjectFile=".\..\..\..\obj\encoder\plus\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\plus\Debug/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -174,12 +152,8 @@
AdditionalDependencies="$(OutDir)\welsecore.lib $(OutDir)\welsvp.lib"
OutputFile="$(OutDir)\welsenc.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\..\libs"
ModuleDefinitionFile="..\..\..\encoder\plus\src\wels_enc_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsenc.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\welsenc.map"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsenc.lib"
@@ -210,8 +184,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\encoder\plus\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -233,27 +207,17 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
TargetEnvironment="1"
TypeLibraryName=".\..\..\..\..\..\bin\Release/WelsEncPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="3"
InlineFunctionExpansion="2"
FavorSizeOrSpeed="1"
EnableFiberSafeOptimizations="true"
AdditionalIncludeDirectories="..\..\..\encoder\plus\inc;..\..\..\encoder\core\inc;..\..\..\api\svc;..\..\..\common\inc;..\..\..\processing\interface"
PreprocessorDefinitions="NDEBUG;_USRDLL;X86_ASM"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\plus\Release/WelsEncPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\plus\Release/"
ObjectFile=".\..\..\..\obj\encoder\plus\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\plus\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -273,13 +237,8 @@
AdditionalDependencies="$(OutDir)\welsecore.lib $(OutDir)\welsvp.lib"
OutputFile="$(OutDir)\welsenc.dll"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\..\libs"
ModuleDefinitionFile="..\..\..\encoder\plus\src\wels_enc_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsenc.pdb"
GenerateMapFile="false"
MapFileName=""
MapExports="false"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsenc.lib"
@@ -310,8 +269,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\encoder\plus\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -333,27 +292,17 @@
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\Release/WelsEncPlus.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="3"
InlineFunctionExpansion="2"
FavorSizeOrSpeed="1"
EnableFiberSafeOptimizations="true"
AdditionalIncludeDirectories="..\..\..\encoder\plus\inc;..\..\..\encoder\core\inc;..\..\..\api\svc;..\..\..\common\inc;..\..\..\processing\interface"
PreprocessorDefinitions="NDEBUG;_USRDLL;X86_ASM"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encoder\plus\Release/WelsEncPlus.pch"
AssemblerListingLocation=".\..\..\..\obj\encoder\plus\Release/"
ObjectFile=".\..\..\..\obj\encoder\plus\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encoder\plus\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -373,13 +322,8 @@
AdditionalDependencies="$(OutDir)\welsecore.lib $(OutDir)\welsvp.lib"
OutputFile="$(OutDir)\welsenc.dll"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\..\libs"
ModuleDefinitionFile="..\..\..\encoder\plus\src\wels_enc_export.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\welsenc.pdb"
GenerateMapFile="false"
MapFileName=""
MapExports="false"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
ImportLibrary="$(OutDir)\welsenc.lib"

View File

@@ -20,8 +20,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Debug"
IntermediateDirectory=".\..\..\..\obj\encConsole\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -42,8 +42,6 @@
/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\..\..\..\..\..\bin\Debug/encConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -53,10 +51,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encConsole\Debug/encConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\encConsole\Debug/"
ObjectFile=".\..\..\..\obj\encConsole\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encConsole\Debug/"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -76,11 +70,7 @@
AdditionalDependencies="$(OutDir)\welsenc.lib"
OutputFile="$(OutDir)\encConsole.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\bin"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\encConsole.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\encConsole.map"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -111,8 +101,8 @@
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Debug"
IntermediateDirectory=".\..\..\..\obj\encConsole\Debug"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -133,9 +123,6 @@
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\Debug/encConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -145,10 +132,6 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\..\..\..\obj\encConsole\Debug/encConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\encConsole\Debug/"
ObjectFile=".\..\..\..\obj\encConsole\Debug/"
ProgramDataBaseFileName=".\..\..\..\obj\encConsole\Debug/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -168,11 +151,7 @@
AdditionalDependencies="$(OutDir)\welsenc.lib"
OutputFile="$(OutDir)\encConsole.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="..\..\..\bin"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\encConsole.pdb"
GenerateMapFile="true"
MapFileName="$(OutDir)\encConsole.map"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -203,8 +182,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\..\..\..\..\bin\win32\Release"
IntermediateDirectory=".\..\..\..\obj\encConsole\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -225,8 +204,6 @@
/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\..\..\..\..\..\bin\Release/encConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -237,10 +214,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encConsole\Release/encConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\encConsole\Release/"
ObjectFile=".\..\..\..\obj\encConsole\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encConsole\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -260,11 +233,7 @@
AdditionalDependencies="$(OutDir)\welsenc.lib"
OutputFile="$(OutDir)\encConsole.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\bin"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\encConsole.pdb"
GenerateMapFile="false"
MapExports="false"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"
@@ -295,8 +264,8 @@
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory=".\..\..\..\..\bin\win64\Release"
IntermediateDirectory=".\..\..\..\obj\encConsole\Release"
OutputDirectory=".\..\..\..\..\bin\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
@@ -317,9 +286,6 @@
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
TypeLibraryName=".\..\..\..\..\..\bin\Release/encConsole.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
@@ -330,10 +296,6 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\..\..\..\obj\encConsole\Release/encConsole.pch"
AssemblerListingLocation=".\..\..\..\obj\encConsole\Release/"
ObjectFile=".\..\..\..\obj\encConsole\Release/"
ProgramDataBaseFileName=".\..\..\..\obj\encConsole\Release/"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -353,11 +315,7 @@
AdditionalDependencies="$(OutDir)\welsenc.lib"
OutputFile="$(OutDir)\encConsole.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\..\..\bin"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)\encConsole.pdb"
GenerateMapFile="false"
MapExports="false"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="2"

View File

@@ -30,6 +30,10 @@
*
*/
#ifdef HAVE_NEON
.syntax unified
#ifdef __APPLE__
.macro WELS_ASM_FUNC_BEGIN
@@ -44,7 +48,6 @@ mov pc, lr
.endm
#else
.syntax unified
.section .note.GNU-stack,"",%progbits // Mark stack as non-executable
.text
@@ -62,3 +65,5 @@ mov pc, lr
.endfunc
.endm
#endif
#endif

View File

@@ -855,7 +855,7 @@ WELS_ASM_FUNC_END
beq bs_nzc_check_jump0
sub r6, $0, $2, lsl #4
sub r6, $2, lsl #3
sub r6, r6, $2, lsl #3
add r6, #12
vld1.32 d3[1], [r6]

View File

@@ -0,0 +1,83 @@
/*!
* \copy
* Copyright (c) 2013, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifdef HAVE_NEON
.text
#include "arm_arch_common_macro.S"
WELS_ASM_FUNC_BEGIN WelsI16x16LumaPredV_neon
//Get the top line data to 'q0'
sub r3, r1, r2
vldm r3, {d0, d1}
//mov r2, #16
mov r3, #4
//Set the top line to the each line of MB(16*16)
loop_0_get_i16x16_luma_pred_v:
vst1.8 {d0,d1}, [r0]!
vst1.8 {d0,d1}, [r0]!
vst1.8 {d0,d1}, [r0]!
vst1.8 {d0,d1}, [r0]!
subs r3, #1
bne loop_0_get_i16x16_luma_pred_v
WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsI16x16LumaPredH_neon
//stmdb sp!, {r4, lr}
sub r1, r1, #1
mov r3, #4
loop_0_get_i16x16_luma_pred_h:
//Get one byte data from left side
vld1.8 {d0[],d1[]}, [r1], r2
vld1.8 {d2[],d3[]}, [r1], r2
vld1.8 {d4[],d5[]}, [r1], r2
vld1.8 {d6[],d7[]}, [r1], r2
//Set the line of MB using the left side byte data
vst1.8 {d0,d1}, [r0]!
//add r0, #16
vst1.8 {d2,d3}, [r0]!
//add r0, #16
vst1.8 {d4,d5}, [r0]!
//add r0, #16
vst1.8 {d6,d7}, [r0]!
//add r0, #16
subs r3, #1
bne loop_0_get_i16x16_luma_pred_h
WELS_ASM_FUNC_END
#endif

View File

@@ -67,11 +67,4 @@ ret
mov \arg0\().8b, \arg1\().8b
.endm
.macro ext.16b arg0, arg1, arg2, arg3
ext \arg0\().16b, \arg1\().16b, \arg2\().16b, \arg3
.endm
.macro ext.8b arg0, arg1, arg2, arg3
ext \arg0\().8b, \arg1\().8b, \arg2\().8b, \arg3
.endm
#endif

View File

@@ -212,7 +212,7 @@
ld1 {v1.s} [3], [x6]
bs_nzc_check_jump0:
ext.16b v1, v1, v0, #12
ext v1.16b, v1.16b, v0.16b, #12
add $3.16b, v0.16b, v1.16b
// Arrange the input data --- LEFT
@@ -233,7 +233,7 @@ bs_nzc_check_jump1:
zip1 v0.16b, v0.16b, v2.16b
ins v2.d[0], v0.d[1]
zip1 v0.16b, v0.16b, v2.16b
ext.16b v1, v1, v0, #12
ext v1.16b, v1.16b, v0.16b, #12
add $4.16b, v0.16b, v1.16b
.endm
@@ -470,7 +470,7 @@ bs_mv_check_jump1:
ld1 {v1.s} [3], [x6]
bs_nzc_check_jump0:
ext.16b v1, v1, v0, #12
ext v1.16b, v1.16b, v0.16b, #12
add \arg3\().16b, v0.16b, v1.16b
// Arrange the input data --- LEFT
@@ -491,7 +491,7 @@ bs_nzc_check_jump1:
zip1 v0.16b, v0.16b, v2.16b
ins v2.d[0], v0.d[1]
zip1 v0.16b, v0.16b, v2.16b
ext.16b v1, v1, v0, #12
ext v1.16b, v1.16b, v0.16b, #12
add \arg4\().16b, v0.16b, v1.16b
.endm

View File

@@ -0,0 +1,55 @@
/*!
* \copy
* Copyright (c) 2013, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifdef HAVE_NEON_AARCH64
.text
#include "arm_arch64_common_macro.S"
//for Luma 16x16
WELS_ASM_AARCH64_FUNC_BEGIN WelsI16x16LumaPredV_AArch64_neon
sub x3, x1, x2
ld1 {v0.16b}, [x3]
.rept 16
st1 {v0.16b}, [x0], 16
.endr
WELS_ASM_AARCH64_FUNC_END
WELS_ASM_AARCH64_FUNC_BEGIN WelsI16x16LumaPredH_AArch64_neon
sub x3, x1, #1
.rept 16
ld1r {v0.16b}, [x3], x2
st1 {v0.16b}, [x0], 16
.endr
WELS_ASM_AARCH64_FUNC_END
#endif

View File

@@ -33,7 +33,7 @@
#ifdef HAVE_NEON_AARCH64
.text
#include "arm_arch64_common_macro.S"
.align 16
.align 4
filter_para: .short 0, 1, -5, 20, 0, 0, 0, 0
#ifdef __APPLE__
@@ -197,8 +197,8 @@ filter_para: .short 0, 1, -5, 20, 0, 0, 0, 0
.macro UNPACK_FILTER_SINGLE_TAG_16BITS // v0, v1, v22, v23
// { // each 16bits; input: d_dst, d_src[0:5], para, working, working, d(low part of d_dst)
ext.16b $3, $1, $1, #14 // X[0][1][2][3][4][5]O
ext.16b $4, $3, $3, #8 // [3][4][5]OX[0][1][2]
ext $3.16b, $1.16b, $1.16b, #14 // X[0][1][2][3][4][5]O
ext $4.16b, $3.16b, $3.16b, #8 // [3][4][5]OX[0][1][2]
rev64 $4.8h, $4.8h // X[5][4][3][2][1][0]O
add $3.8h, $3.8h, $4.8h // each 16bits, *[50][41][32][23][14][05]*
smull $3.4s, $3.4h, $2.4h // 0+1*[50]-5*[41]+20[32]
@@ -413,8 +413,8 @@ WELS_ASM_AARCH64_FUNC_BEGIN McHorVer20WidthEq8_AArch64_neon
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_h_mc_luma_loop:
ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
trn1 v2.2d, v2.2d, v3.2d
ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -492,8 +492,8 @@ WELS_ASM_AARCH64_FUNC_BEGIN McHorVer10WidthEq8_AArch64_neon
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_xy_10_mc_luma_loop:
ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
trn1 v2.2d, v2.2d, v3.2d
ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -572,8 +572,8 @@ WELS_ASM_AARCH64_FUNC_BEGIN McHorVer30WidthEq8_AArch64_neon
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_xy_30_mc_luma_loop:
ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
trn1 v2.2d, v2.2d, v3.2d
ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -1713,12 +1713,12 @@ WELS_ASM_AARCH64_FUNC_END
WELS_ASM_AARCH64_FUNC_BEGIN McChromaWidthEq8_AArch64_neon
ld4r {v4.8b, v5.8b, v6.8b, v7.8b}, [x4] //load A/B/C/D
ld1 {v0.16b}, [x0], x1 // src[x]
ext.16b v1, v0, v0, #1 // src[x+1]
ext v1.16b, v0.16b, v0.16b, #1 // src[x+1]
w8_mc_chroma_loop:
ld1 {v2.16b}, [x0], x1 // src[x+stride]
ext.16b v3, v2, v2, #1 // src[x+stride+1]
ext v3.16b, v2.16b, v2.16b, #1 // src[x+stride+1]
ld1 {v18.16b}, [x0], x1 // src[x+2*stride]
ext.16b v19, v18, v18, #1 // src[x+2*stride+1]
ext v19.16b, v18.16b, v18.16b, #1 // src[x+2*stride+1]
umull v16.8h, v0.8b, v4.8b
umlal v16.8h, v1.8b, v5.8b
@@ -1744,12 +1744,12 @@ WELS_ASM_AARCH64_FUNC_END
WELS_ASM_AARCH64_FUNC_BEGIN McChromaWidthEq4_AArch64_neon
ld4r {v4.8b, v5.8b, v6.8b, v7.8b}, [x4] //load A/B/C/D
ld1 {v0.8b}, [x0], x1 // src[x]
ext.8b v1, v0, v0, #1 // src[x+1]
ext v1.8b, v0.8b, v0.8b, #1 // src[x+1]
w4_mc_chroma_loop:
ld1 {v2.8b}, [x0], x1 // src[x+stride]
ext.8b v3, v2, v2, #1 // src[x+stride+1]
ext v3.8b, v2.8b, v2.8b, #1 // src[x+stride+1]
ld1 {v18.8b}, [x0], x1 // src[x+2*stride]
ext.8b v19, v18, v18, #1 // src[x+2*stride+1]
ext v19.8b, v18.8b, v18.8b, #1 // src[x+2*stride+1]
zip1 v0.4s, v0.4s, v2.4s
zip1 v1.4s, v1.4s, v3.4s
@@ -1779,20 +1779,20 @@ WELS_ASM_AARCH64_FUNC_BEGIN McHorVer20Width17_AArch64_neon
movi v1.8h, #5, lsl #0
ldr q22, filter_para
w17_h_mc_luma_loop:
ld1 {v2.8b, v3.8b, v4.8b}, [x0], x1 //only use 22(17+5); v2=src[-2]
trn1 v2.2d, v2.2d, v3.2d
ld1 {v2.16b, v3.16b}, [x0], x1 //only use 22(17+5); v2=src[-2]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
ext v7.16b, v2.16b, v4.16b, #3 //v7=src[1]
ext v16.16b, v2.16b, v4.16b, #4 //v16=src[2]
ext v17.16b, v2.16b, v4.16b, #5 //v17=src[3]
ext v5.16b, v2.16b, v3.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v3.16b, #2 //v6=src[0]
ext v7.16b, v2.16b, v3.16b, #3 //v7=src[1]
ext v16.16b, v2.16b, v3.16b, #4 //v16=src[2]
ext v17.16b, v2.16b, v3.16b, #5 //v17=src[3]
FILTER_6TAG_8BITS1 v2, v5, v6, v7, v16, v17, v20, v0, v1
FILTER_6TAG_8BITS2 v2, v5, v6, v7, v16, v17, v20, v0, v1
st1 {v20.16b}, [x2], x5 //write 16Byte
ext.8b v21, v4, v4, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
ext v21.8b, v3.8b, v3.8b, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
FILTER_SINGLE_TAG_8BITS v21, v22, v23, h21
st1 {v21.b}[0], [x2], x3 //write 16th Byte
@@ -1808,8 +1808,8 @@ WELS_ASM_AARCH64_FUNC_BEGIN McHorVer20Width9_AArch64_neon
movi v1.8h, #5, lsl #0
ldr q22, filter_para
w9_h_mc_luma_loop:
ld1 {v2.8b, v3.8b}, [x0], x1 //only use 14(9+5); v2=src[-2]
trn1 v2.2d, v2.2d, v3.2d
ld1 {v2.16b}, [x0], x1 //only use 14(9+5); v2=src[-2]
mov v3.d[0], v2.d[1]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -1820,7 +1820,7 @@ w9_h_mc_luma_loop:
FILTER_6TAG_8BITS1 v2, v5, v6, v7, v16, v17, v20, v0, v1
st1 {v20.8b}, [x2], x5 //write 8Byte
ext.8b v21, v3, v3, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
ext v21.8b, v3.8b, v3.8b, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
FILTER_SINGLE_TAG_8BITS v21, v22, v23, h21
st1 {v21.b}[0], [x2], x3 //write 9th Byte

View File

@@ -1,5 +1,4 @@
#!/bin/bash
rm -f codec/common/inc/version.h
git rev-list HEAD | sort > config.git-hash
LOCALVER=`wc -l config.git-hash | awk '{print $1}'`
if [ $LOCALVER \> 1 ] ; then
@@ -15,6 +14,13 @@ fi
GIT_VERSION='"'$GIT_VERSION'"'
rm -f config.git-hash
cat codec/common/inc/version.h.template | sed "s/\$FULL_VERSION/$GIT_VERSION/g" > codec/common/inc/version.h
cat codec/common/inc/version.h.template | sed "s/\$FULL_VERSION/$GIT_VERSION/g" > codec/common/inc/version.h.new
if cmp codec/common/inc/version.h.new codec/common/inc/version.h > /dev/null 2>&1; then
# Identical to old version, don't touch it (to avoid unnecessary rebuilds)
rm codec/common/inc/version.h.new
echo "Keeping existing codec/common/inc/version.h"
exit 0
fi
mv codec/common/inc/version.h.new codec/common/inc/version.h
echo "Generated codec/common/inc/version.h"

View File

@@ -117,6 +117,8 @@ WELS_THREAD_ERROR_CODE WelsMultipleEventsWaitAllBlocking (uint32_t nCount, WE
WELS_THREAD_ERROR_CODE WelsThreadCreate (WELS_THREAD_HANDLE* thread, LPWELS_THREAD_ROUTINE routine,
void* arg, WELS_THREAD_ATTR attr);
WELS_THREAD_ERROR_CODE WelsThreadSetName (const char* thread_name);
WELS_THREAD_ERROR_CODE WelsThreadJoin (WELS_THREAD_HANDLE thread);
WELS_THREAD_HANDLE WelsThreadSelf();

View File

@@ -52,7 +52,6 @@
#include <sys/types.h>
#include <sys/timeb.h>
#else
#include <sys/timeb.h>
#include <sys/time.h>
#include "typedefs.h"
#endif//_WIN32
@@ -72,7 +71,10 @@ typedef FILE WelsFileHandle;
#ifdef _WIN32
typedef struct _timeb SWelsTime;
#else
typedef struct timeb SWelsTime;
typedef struct TagWelsTime {
time_t time;
unsigned short millitm;
} SWelsTime;
#endif
int32_t WelsSnprintf (char* buffer, int32_t sizeOfBuffer, const char* format, ...);

View File

@@ -0,0 +1,76 @@
/*!
* \copy
* Copyright (c) 2009-2013, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* \file intra_pred_common.h
*
* \brief interfaces for intra predictor about 16x16.
*
* \date 4/2/2014 Created
*
*************************************************************************************
*/
#ifndef INTRA_PRED_COMMON_H
#define INTRA_PRED_COMMON_H
#include "typedefs.h"
void WelsI16x16LumaPredV_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
void WelsI16x16LumaPredH_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
#if defined(__cplusplus)
extern "C" {
#endif//__cplusplus
#if defined(X86_ASM)
//for intra-prediction ASM functions
void WelsI16x16LumaPredV_sse2 (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
void WelsI16x16LumaPredH_sse2 (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
#endif//X86_ASM
#if defined(HAVE_NEON)
void WelsI16x16LumaPredV_neon (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
void WelsI16x16LumaPredH_neon (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
#endif//HAVE_NEON
#if defined(HAVE_NEON_AARCH64)
void WelsI16x16LumaPredV_AArch64_neon (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
void WelsI16x16LumaPredH_AArch64_neon (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride);
#endif//HAVE_NEON_AARCH64
#if defined(__cplusplus)
}
#endif//__cplusplus
#endif//

View File

@@ -40,13 +40,13 @@
struct tagUnaligned_64 {
uint64_t l;
} __attribute__ ((packed));
} __attribute__ ((packed)) __attribute__ ((may_alias));
struct tagUnaligned_32 {
uint32_t l;
} __attribute__ ((packed));
} __attribute__ ((packed)) __attribute__ ((may_alias));
struct tagUnaligned_16 {
uint16_t l;
} __attribute__ ((packed));
} __attribute__ ((packed)) __attribute__ ((may_alias));
#define LD16(a) (((struct tagUnaligned_16 *) (a))->l)
#define LD32(a) (((struct tagUnaligned_32 *) (a))->l)
@@ -54,7 +54,7 @@ struct tagUnaligned_16 {
#define STRUCTA(size, align) struct tagUnaligned_##size##_##align {\
uint##size##_t l; \
} __attribute__ ((aligned(align)))
} __attribute__ ((aligned(align))) __attribute__ ((may_alias))
STRUCTA (16, 2);
STRUCTA (32, 2);
STRUCTA (32, 4);

View File

@@ -42,6 +42,7 @@
#include <math.h>
#include <assert.h>
#include <string.h>
#include "typedefs.h"
@@ -116,6 +117,10 @@
#define WELS_ROUND(x) ((int32_t)(0.5+(x)))
#endif//WELS_ROUND
#ifndef WELS_ROUND64
#define WELS_ROUND64(x) ((int64_t)(0.5+(x)))
#endif//WELS_ROUND
#ifndef WELS_DIV_ROUND
#define WELS_DIV_ROUND(x,y) ((int32_t)((y)==0?((x)/((y)+1)):(((y)/2+(x))/(y))))
#endif//WELS_DIV_ROUND
@@ -192,6 +197,14 @@ static inline uint8_t WelsClip1 (int32_t iX) {
#define WELS_CLIP3(iX, iY, iZ) ((iX) < (iY) ? (iY) : ((iX) > (iZ) ? (iZ) : (iX)))
#endif //WELS_CLIP3
template<typename T> T WelsClip3(T iX, T iY, T iZ) {
if (iX < iY)
return iY;
if (iX > iZ)
return iZ;
return iX;
}
/*
* Description: to check variable validation and return the specified result
* iResult: value to be checked
@@ -268,6 +281,37 @@ static inline bool WELS_POWER2_IF (uint32_t v) {
#define WELS_GCC_UNUSED
#endif
inline bool CheckInRangeCloseOpen (const int16_t kiCurrent, const int16_t kiMin, const int16_t kiMax) {
return ((kiCurrent >= kiMin) && (kiCurrent < kiMax));
}
static inline void WelsSetMemUint32_c (uint32_t* pDst, uint32_t iValue, int32_t iSizeOfData) {
for (int i = 0; i < iSizeOfData; i++) {
pDst[i] = iValue;
}
}
static inline void WelsSetMemUint16_c (uint16_t* pDst, uint16_t iValue, int32_t iSizeOfData) {
for (int i = 0; i < iSizeOfData; i++) {
pDst[i] = iValue;
}
}
inline void WelsSetMemMultiplebytes_c (void* pDst, uint32_t iValue, int32_t iSizeOfData, int32_t iDataLengthOfData) {
assert (4 == iDataLengthOfData || 2 == iDataLengthOfData || 1 == iDataLengthOfData);
// TODO: consider add assembly for these functions
if (0 != iValue) {
if (4 == iDataLengthOfData) {
WelsSetMemUint32_c (static_cast<uint32_t*> (pDst), static_cast<uint32_t> (iValue), iSizeOfData);
} else if (2 == iDataLengthOfData) {
WelsSetMemUint16_c (static_cast<uint16_t*> (pDst), static_cast<uint16_t> (iValue), iSizeOfData);
} else {
memset (static_cast<uint8_t*> (pDst), static_cast<uint8_t> (iValue), iSizeOfData);
}
} else {
memset (static_cast<uint8_t*> (pDst), 0, iSizeOfData * iDataLengthOfData);
}
}
#endif//WELS_MACRO_UTILIZATIONS_H__

View File

@@ -47,7 +47,6 @@
#include <sys/time.h>
#else
#include <windows.h>
#include <sys/timeb.h>
#endif
#include <time.h>

View File

@@ -43,6 +43,8 @@
#include "typedefs.h"
#define MAX_LOG_SIZE 1024
#define MAX_WIDTH (4096)
#define MAX_HEIGHT (2304)//MAX_FS_LEVEL51 (36864); MAX_FS_LEVEL51*256/4096 = 2304
/*
* Function pointer declaration for various tool sets
*/
@@ -52,6 +54,7 @@ typedef void (*PWelsLogCallbackFunc) (void* pCtx, const int32_t iLevel, const ch
typedef struct TagLogContext {
PWelsLogCallbackFunc pfLog;
void* pLogCtx;
void* pCodecInstance;
} SLogContext;

View File

@@ -1,6 +1,6 @@
#ifndef VERSION_H
#define VERSION_H
#define VERSION_NUMBER "openh264 default: 1.1"
#define VERSION_NUMBER "openh264 default: 1.2"
#endif // VERSION_H

View File

@@ -44,6 +44,7 @@ class welsCodecTrace {
welsCodecTrace();
~welsCodecTrace();
void SetCodecInstance (void* pCodecInstance);
void SetTraceLevel (const int32_t kiLevel);
void SetTraceCallback (WelsTraceCallback func);
void SetTraceCallbackContext (void* pCtx);

View File

@@ -36,12 +36,31 @@
#include "typedefs.h"
#include "macros.h"
#include "codec_app_def.h"
namespace WelsCommon {
/*common use table*/
#define CTX_NA 0
#define WELS_CONTEXT_COUNT 460
#define LEVEL_NUMBER 17
typedef struct TagLevelLimits {
ELevelIdc uiLevelIdc; // level idc
uint32_t uiMaxMBPS; // Max macroblock processing rate(MB/s)
uint32_t uiMaxFS; // Max frame sizea(MBs)
uint32_t uiMaxDPBMbs;// Max decoded picture buffer size(MBs)
uint32_t uiMaxBR; // Max video bit rate
uint32_t uiMaxCPB; // Max CPB size
int16_t iMinVmv; // Vertical MV component range upper bound
int16_t iMaxVmv; // Vertical MV component range lower bound
uint16_t uiMinCR; // Min compression ration
int16_t iMaxMvsPer2Mb; // Max number of motion vectors per two consecutive MBs
} SLevelLimits;
#define CpbBrNalFactor 1200 //baseline,main,and extended profiles.
extern const SLevelLimits g_ksLevelLimits[LEVEL_NUMBER];
extern const uint32_t g_kuiLevelMaps[LEVEL_NUMBER];
extern const uint8_t g_kuiMbCountScan4Idx[24];
extern const uint8_t g_kuiCache30ScanIdx[16];
extern const uint8_t g_kuiCache48CountScan4Idx[24];
@@ -49,42 +68,45 @@ extern const uint8_t g_kuiCache48CountScan4Idx[24];
extern const ALIGNED_DECLARE (uint16_t, g_kuiDequantCoeff[52][8], 16);
extern const uint8_t g_kuiChromaQpTable[52];
extern const uint8_t g_kuiCabacRangeLps[64][4];
extern const int8_t g_kiCabacGlobalContextIdx[WELS_CONTEXT_COUNT][4][2];
extern const uint8_t g_kuiStateTransTable[64][2];
/*
* NAL Unit Type (5 Bits)
*/
enum EWelsNalUnitType {
NAL_UNIT_UNSPEC_0 = 0,
NAL_UNIT_CODED_SLICE = 1,
NAL_UNIT_CODED_SLICE_DPA = 2,
NAL_UNIT_CODED_SLICE_DPB = 3,
NAL_UNIT_CODED_SLICE_DPC = 4,
NAL_UNIT_CODED_SLICE_IDR = 5,
NAL_UNIT_SEI = 6,
NAL_UNIT_SPS = 7,
NAL_UNIT_PPS = 8,
NAL_UNIT_AU_DELIMITER = 9,
NAL_UNIT_END_OF_SEQ = 10,
NAL_UNIT_END_OF_STR = 11,
NAL_UNIT_FILLER_DATA = 12,
NAL_UNIT_SPS_EXT = 13,
NAL_UNIT_PREFIX = 14,
NAL_UNIT_SUBSET_SPS = 15,
NAL_UNIT_RESV_16 = 16,
NAL_UNIT_RESV_17 = 17,
NAL_UNIT_RESV_18 = 18,
NAL_UNIT_AUX_CODED_SLICE = 19,
NAL_UNIT_CODED_SLICE_EXT = 20,
NAL_UNIT_RESV_21 = 21,
NAL_UNIT_RESV_22 = 22,
NAL_UNIT_RESV_23 = 23,
NAL_UNIT_UNSPEC_24 = 24,
NAL_UNIT_UNSPEC_25 = 25,
NAL_UNIT_UNSPEC_26 = 26,
NAL_UNIT_UNSPEC_27 = 27,
NAL_UNIT_UNSPEC_28 = 28,
NAL_UNIT_UNSPEC_29 = 29,
NAL_UNIT_UNSPEC_30 = 30,
NAL_UNIT_UNSPEC_31 = 31
NAL_UNIT_UNSPEC_0 = 0,
NAL_UNIT_CODED_SLICE = 1,
NAL_UNIT_CODED_SLICE_DPA = 2,
NAL_UNIT_CODED_SLICE_DPB = 3,
NAL_UNIT_CODED_SLICE_DPC = 4,
NAL_UNIT_CODED_SLICE_IDR = 5,
NAL_UNIT_SEI = 6,
NAL_UNIT_SPS = 7,
NAL_UNIT_PPS = 8,
NAL_UNIT_AU_DELIMITER = 9,
NAL_UNIT_END_OF_SEQ = 10,
NAL_UNIT_END_OF_STR = 11,
NAL_UNIT_FILLER_DATA = 12,
NAL_UNIT_SPS_EXT = 13,
NAL_UNIT_PREFIX = 14,
NAL_UNIT_SUBSET_SPS = 15,
NAL_UNIT_RESV_16 = 16,
NAL_UNIT_RESV_17 = 17,
NAL_UNIT_RESV_18 = 18,
NAL_UNIT_AUX_CODED_SLICE = 19,
NAL_UNIT_CODED_SLICE_EXT = 20,
NAL_UNIT_RESV_21 = 21,
NAL_UNIT_RESV_22 = 22,
NAL_UNIT_RESV_23 = 23,
NAL_UNIT_UNSPEC_24 = 24,
NAL_UNIT_UNSPEC_25 = 25,
NAL_UNIT_UNSPEC_26 = 26,
NAL_UNIT_UNSPEC_27 = 27,
NAL_UNIT_UNSPEC_28 = 28,
NAL_UNIT_UNSPEC_29 = 29,
NAL_UNIT_UNSPEC_30 = 30,
NAL_UNIT_UNSPEC_31 = 31
};
/*
@@ -92,10 +114,10 @@ NAL_UNIT_UNSPEC_31 = 31
*/
enum EWelsNalRefIdc {
NRI_PRI_LOWEST = 0,
NRI_PRI_LOW = 1,
NRI_PRI_HIGH = 2,
NRI_PRI_HIGHEST = 3
NRI_PRI_LOWEST = 0,
NRI_PRI_LOW = 1,
NRI_PRI_HIGH = 2,
NRI_PRI_HIGHEST = 3
};
/*
@@ -103,9 +125,9 @@ NRI_PRI_HIGHEST = 3
*/
enum EVclType {
NON_VCL = 0,
VCL = 1,
NOT_APP = 2
NON_VCL = 0,
VCL = 1,
NOT_APP = 2
};
/*
@@ -132,43 +154,43 @@ extern const EVclType g_keTypeMap[32][2];
*/
enum EWelsSliceType {
P_SLICE = 0,
B_SLICE = 1,
I_SLICE = 2,
SP_SLICE = 3,
SI_SLICE = 4,
UNKNOWN_SLICE = 5
P_SLICE = 0,
B_SLICE = 1,
I_SLICE = 2,
SP_SLICE = 3,
SI_SLICE = 4,
UNKNOWN_SLICE = 5
};
/* SSlice Types in scalable extension */ ;
/* SSlice Types in scalable extension */
enum ESliceTypeExt {
EP_SLICE = 0, // EP_SLICE: 0, 5
EB_SLICE = 1, // EB_SLICE: 1, 6
EI_SLICE = 2 // EI_SLICE: 2, 7
EP_SLICE = 0, // EP_SLICE: 0, 5
EB_SLICE = 1, // EB_SLICE: 1, 6
EI_SLICE = 2 // EI_SLICE: 2, 7
};
/* List Index */
enum EListIndex {
LIST_0 = 0,
LIST_1 = 1,
LIST_A = 2
LIST_0 = 0,
LIST_1 = 1,
LIST_A = 2
};
/* Motion Vector components */
enum EMvComp {
MV_X = 0,
MV_Y = 1,
MV_A = 2
MV_X = 0,
MV_Y = 1,
MV_A = 2
};
/* Chroma Components */
enum EChromaComp {
CHROMA_CB = 0,
CHROMA_CR = 1,
CHROMA_A = 2
CHROMA_CB = 0,
CHROMA_CR = 1,
CHROMA_A = 2
};
@@ -177,13 +199,13 @@ CHROMA_A = 2
* Memory Management Control Operation (MMCO) code
*/
enum EMmcoCode {
MMCO_END = 0,
MMCO_SHORT2UNUSED = 1,
MMCO_LONG2UNUSED = 2,
MMCO_SHORT2LONG = 3,
MMCO_SET_MAX_LONG = 4,
MMCO_RESET = 5,
MMCO_LONG = 6
MMCO_END = 0,
MMCO_SHORT2UNUSED = 1,
MMCO_LONG2UNUSED = 2,
MMCO_SHORT2LONG = 3,
MMCO_SET_MAX_LONG = 4,
MMCO_RESET = 5,
MMCO_LONG = 6
};
/////////intra16x16 Luma

View File

@@ -58,6 +58,9 @@
#ifdef ANDROID_NDK
#include <cpu-features.h>
#endif
#ifdef __ANDROID__
#include <android/api-level.h>
#endif
#include "WelsThreadLib.h"
#include <stdio.h>
@@ -195,6 +198,12 @@ WELS_THREAD_ERROR_CODE WelsThreadCreate (WELS_THREAD_HANDLE* thread, LPWELS_
return WELS_THREAD_ERROR_OK;
}
WELS_THREAD_ERROR_CODE WelsThreadSetName (const char* thread_name) {
// do nothing
return WELS_THREAD_ERROR_OK;
}
WELS_THREAD_ERROR_CODE WelsThreadJoin (WELS_THREAD_HANDLE thread) {
WaitForSingleObject (thread, INFINITE);
CloseHandle (thread);
@@ -242,6 +251,17 @@ WELS_THREAD_ERROR_CODE WelsThreadCreate (WELS_THREAD_HANDLE* thread, LPWELS_
return err;
}
WELS_THREAD_ERROR_CODE WelsThreadSetName (const char* thread_name) {
#ifdef APPLE_IOS
pthread_setname_np(thread_name);
#endif
#if defined(__ANDROID__) && __ANDROID_API__ >= 9
pthread_setname_np(pthread_self(), thread_name);
#endif
// do nothing
return WELS_THREAD_ERROR_OK;
}
WELS_THREAD_ERROR_CODE WelsThreadJoin (WELS_THREAD_HANDLE thread) {
return pthread_join (thread, NULL);
}

View File

@@ -149,5 +149,545 @@ ALIGNED_DECLARE (const uint16_t, g_kuiDequantCoeff[52][8], 16) = {
/*50*/{ 3328, 4096, 3328, 4096, 4096, 5120, 4096, 5120 }, /*51*/{ 3584, 4608, 3584, 4608, 4608, 5888, 4608, 5888 },
};
// table A-1 - Level limits
const SLevelLimits g_ksLevelLimits[LEVEL_NUMBER] = {
{LEVEL_1_0, 1485, 99, 396, 64, 175, -256, 255, 2, 0x7fff}, /* level 1 */
{LEVEL_1_B, 1485, 99, 396, 128, 350, -256, 255, 2, 0x7fff}, /* level 1.b */
{LEVEL_1_1, 3000, 396, 900, 192, 500, -512, 511, 2, 0x7fff}, /* level 1.1 */
{LEVEL_1_2, 6000, 396, 2376, 384, 1000, -512, 511, 2, 0x7fff}, /* level 1.2 */
{LEVEL_1_3, 11880, 396, 2376, 768, 2000, -512, 511, 2, 0x7fff}, /* level 1.3 */
{LEVEL_2_0, 11880, 396, 2376, 2000, 2000, -512, 511, 2, 0x7fff}, /* level 2 */
{LEVEL_2_1, 19800, 792, 4752, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.1 */
{LEVEL_2_2, 20250, 1620, 8100, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.2 */
{LEVEL_3_0, 40500, 1620, 8100, 10000, 10000, -1024, 1023, 2, 32 }, /* level 3 */
{LEVEL_3_1, 108000, 3600, 18000, 14000, 14000, -2048, 2047, 4, 16}, /* level 3.1 */
{LEVEL_3_2, 216000, 5120, 20480, 20000, 20000, -2048, 2047, 4, 16}, /* level 3.2 */
{LEVEL_4_0, 245760, 8192, 32768, 20000, 25000, -2048, 2047, 4, 16}, /* level 4 */
{LEVEL_4_1, 245760, 8192, 32768, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.1 */
{LEVEL_4_2, 522240, 8704, 34816, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.2 */
{LEVEL_5_0, 589824, 22080, 110400, 135000, 135000, -2048, 2047, 2, 16}, /* level 5 */
{LEVEL_5_1, 983040, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16}, /* level 5.1 */
{LEVEL_5_2, 2073600, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16} /* level 5.2 */
};
const uint32_t g_kuiLevelMaps[LEVEL_NUMBER] = {
10, 9, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52
};
//for cabac
/* this table is from Table9-12 to Table 9-24 */
const int8_t g_kiCabacGlobalContextIdx[WELS_CONTEXT_COUNT][4][2] = {
//0-10 Table 9-12
{{20, -15}, {20, -15}, {20, -15}, {20, -15}},
{{2, 54}, {2, 54}, {2, 54}, {2, 54}},
{{3, 74}, {3, 74}, {3, 74}, {3, 74}},
{{20, -15}, {20, -15}, {20, -15}, {20, -15}},
{{2, 54}, {2, 54}, {2, 54}, {2, 54}},
{{3, 74}, {3, 74}, {3, 74}, {3, 74}},
{{ -28, 127}, { -28, 127}, { -28, 127}, { -28, 127}},
{{ -23, 104}, { -23, 104}, { -23, 104}, { -23, 104}},
{{ -6, 53}, { -6, 53}, { -6, 53}, { -6, 53}},
{{ -1, 54}, { -1, 54}, { -1, 54}, { -1, 54}},
{{7, 51}, {7, 51}, {7, 51}, {7, 51}},
//11-23 Table 9-13
{{CTX_NA, CTX_NA}, {23, 33}, {22, 25}, {29, 16}},
{{CTX_NA, CTX_NA}, {23, 2}, {34, 0}, {25, 0}},
{{CTX_NA, CTX_NA}, {21, 0}, {16, 0}, {14, 0}},
{{CTX_NA, CTX_NA}, {1, 9}, { -2, 9}, { -10, 51}},
{{CTX_NA, CTX_NA}, {0, 49}, {4, 41}, { -3, 62}},
{{CTX_NA, CTX_NA}, { -37, 118}, { -29, 118}, { -27, 99}},
{{CTX_NA, CTX_NA}, {5, 57}, {2, 65}, {26, 16}},
{{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}},
{{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}},
{{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}},
{{CTX_NA, CTX_NA}, {12, 49}, {9, 50}, {6, 57}},
{{CTX_NA, CTX_NA}, { -4, 73}, { -3, 70}, { -17, 73}},
{{CTX_NA, CTX_NA}, {17, 50}, {10, 54}, {14, 57}},
//24-39 Table9-14
{{CTX_NA, CTX_NA}, {18, 64}, {26, 34}, {20, 40}},
{{CTX_NA, CTX_NA}, {9, 43}, {19, 22}, {20, 10}},
{{CTX_NA, CTX_NA}, {29, 0}, {40, 0}, {29, 0}},
{{CTX_NA, CTX_NA}, {26, 67}, {57, 2}, {54, 0}},
{{CTX_NA, CTX_NA}, {16, 90}, {41, 36}, {37, 42}},
{{CTX_NA, CTX_NA}, {9, 104}, {26, 69}, {12, 97}},
{{CTX_NA, CTX_NA}, { -46, 127}, { -45, 127}, { -32, 127}},
{{CTX_NA, CTX_NA}, { -20, 104}, { -15, 101}, { -22, 117}},
{{CTX_NA, CTX_NA}, {1, 67}, { -4, 76}, { -2, 74}},
{{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}},
{{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}},
{{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}},
{{CTX_NA, CTX_NA}, { -6, 86}, {6, 69}, { -6, 93}},
{{CTX_NA, CTX_NA}, { -17, 95}, { -13, 90}, { -14, 88}},
{{CTX_NA, CTX_NA}, { -6, 61}, {0, 52}, { -6, 44}},
{{CTX_NA, CTX_NA}, {9, 45}, {8, 43}, {4, 55}},
//40-53 Table 9-15
{{CTX_NA, CTX_NA}, { -3, 69}, { -2, 69}, { -11, 89}},
{{CTX_NA, CTX_NA}, { -6, 81}, { -5, 82}, { -15, 103}},
{{CTX_NA, CTX_NA}, { -11, 96}, { -10, 96}, { -21, 116}},
{{CTX_NA, CTX_NA}, {6, 55}, {2, 59}, {19, 57}},
{{CTX_NA, CTX_NA}, {7, 67}, {2, 75}, {20, 58}},
{{CTX_NA, CTX_NA}, { -5, 86}, { -3, 87}, {4, 84}},
{{CTX_NA, CTX_NA}, {2, 88}, { -3, 100}, {6, 96}},
{{CTX_NA, CTX_NA}, {0, 58}, {1, 56}, {1, 63}},
{{CTX_NA, CTX_NA}, { -3, 76}, { -3, 74}, { -5, 85}},
{{CTX_NA, CTX_NA}, { -10, 94}, { -6, 85}, { -13, 106}},
{{CTX_NA, CTX_NA}, {5, 54}, {0, 59}, {5, 63}},
{{CTX_NA, CTX_NA}, {4, 69}, { -3, 81}, {6, 75}},
{{CTX_NA, CTX_NA}, { -3, 81}, { -7, 86}, { -3, 90}},
{{CTX_NA, CTX_NA}, {0, 88}, { -5, 95}, { -1, 101}},
//54-59 Table 9-16
{{CTX_NA, CTX_NA}, { -7, 67}, { -1, 66}, {3, 55}},
{{CTX_NA, CTX_NA}, { -5, 74}, { -1, 77}, { -4, 79}},
{{CTX_NA, CTX_NA}, { -4, 74}, {1, 70}, { -2, 75}},
{{CTX_NA, CTX_NA}, { -5, 80}, { -2, 86}, { -12, 97}},
{{CTX_NA, CTX_NA}, { -7, 72}, { -5, 72}, { -7, 50}},
{{CTX_NA, CTX_NA}, {1, 58}, {0, 61}, {1, 60}},
//60-69 Table 9-17
{{0, 41}, {0, 41}, {0, 41}, {0, 41}},
{{0, 63}, {0, 63}, {0, 63}, {0, 63}},
{{0, 63}, {0, 63}, {0, 63}, {0, 63}},
{{0, 63}, {0, 63}, {0, 63}, {0, 63}},
{{ -9, 83}, { -9, 83}, { -9, 83}, { -9, 83}},
{{4, 86}, {4, 86}, {4, 86}, {4, 86}},
{{0, 97}, {0, 97}, {0, 97}, {0, 97}},
{{ -7, 72}, { -7, 72}, { -7, 72}, { -7, 72}},
{{13, 41}, {13, 41}, {13, 41}, {13, 41}},
{{3, 62}, {3, 62}, {3, 62}, {3, 62}},
//70-104 Table 9-18
{{0, 11}, {0, 45}, {13, 15}, {7, 34}},
{{1, 55}, { -4, 78}, {7, 51}, { -9, 88}},
{{0, 69}, { -3, 96}, {2, 80}, { -20, 127}},
{{ -17, 127}, { -27, 126}, { -39, 127}, { -36, 127}},
{{ -13, 102}, { -28, 98}, { -18, 91}, { -17, 91}},
{{0, 82}, { -25, 101}, { -17, 96}, { -14, 95}},
{{ -7, 74}, { -23, 67}, { -26, 81}, { -25, 84}},
{{ -21, 107}, { -28, 82}, { -35, 98}, { -25, 86}},
{{ -27, 127}, { -20, 94}, { -24, 102}, { -12, 89}},
{{ -31, 127}, { -16, 83}, { -23, 97}, { -17, 91}},
{{ -24, 127}, { -22, 110}, { -27, 119}, { -31, 127}},
{{ -18, 95}, { -21, 91}, { -24, 99}, { -14, 76}},
{{ -27, 127}, { -18, 102}, { -21, 110}, { -18, 103}},
{{ -21, 114}, { -13, 93}, { -18, 102}, { -13, 90}},
{{ -30, 127}, { -29, 127}, { -36, 127}, { -37, 127}},
{{ -17, 123}, { -7, 92}, {0, 80}, {11, 80}},
{{ -12, 115}, { -5, 89}, { -5, 89}, {5, 76}},
{{ -16, 122}, { -7, 96}, { -7, 94}, {2, 84}},
{{ -11, 115}, { -13, 108}, { -4, 92}, {5, 78}},
{{ -12, 63}, { -3, 46}, {0, 39}, { -6, 55}},
{{ -2, 68}, { -1, 65}, {0, 65}, {4, 61}},
{{ -15, 84}, { -1, 57}, { -15, 84}, { -14, 83}},
{{ -13, 104}, { -9, 93}, { -35, 127}, { -37, 127}},
{{ -3, 70}, { -3, 74}, { -2, 73}, { -5, 79}},
{{ -8, 93}, { -9, 92}, { -12, 104}, { -11, 104}},
{{ -10, 90}, { -8, 87}, { -9, 91}, { -11, 91}},
{{ -30, 127}, { -23, 126}, { -31, 127}, { -30, 127}},
{{ -1, 74}, {5, 54}, {3, 55}, {0, 65}},
{{ -6, 97}, {6, 60}, {7, 56}, { -2, 79}},
{{ -7, 91}, {6, 59}, {7, 55}, {0, 72}},
{{ -20, 127}, {6, 69}, {8, 61}, { -4, 92}},
{{ -4, 56}, { -1, 48}, { -3, 53}, { -6, 56}},
{{ -5, 82}, {0, 68}, {0, 68}, {3, 68}},
{{ -7, 76}, { -4, 69}, { -7, 74}, { -8, 71}},
{{ -22, 125}, { -8, 88}, { -9, 88}, { -13, 98}},
//105-165 Table 9-19
{{ -7, 93}, { -2, 85}, { -13, 103}, { -4, 86}},
{{ -11, 87}, { -6, 78}, { -13, 91}, { -12, 88}},
{{ -3, 77}, { -1, 75}, { -9, 89}, { -5, 82}},
{{ -5, 71}, { -7, 77}, { -14, 92}, { -3, 72}},
{{ -4, 63}, {2, 54}, { -8, 76}, { -4, 67}},
{{ -4, 68}, {5, 50}, { -12, 87}, { -8, 72}},
{{ -12, 84}, { -3, 68}, { -23, 110}, { -16, 89}},
{{ -7, 62}, {1, 50}, { -24, 105}, { -9, 69}},
{{ -7, 65}, {6, 42}, { -10, 78}, { -1, 59}},
{{8, 61}, { -4, 81}, { -20, 112}, {5, 66}},
{{5, 56}, {1, 63}, { -17, 99}, {4, 57}},
{{ -2, 66}, { -4, 70}, { -78, 127}, { -4, 71}},
{{1, 64}, {0, 67}, { -70, 127}, { -2, 71}},
{{0, 61}, {2, 57}, { -50, 127}, {2, 58}},
{{ -2, 78}, { -2, 76}, { -46, 127}, { -1, 74}},
{{1, 50}, {11, 35}, { -4, 66}, { -4, 44}},
{{7, 52}, {4, 64}, { -5, 78}, { -1, 69}},
{{10, 35}, {1, 61}, { -4, 71}, {0, 62}},
{{0, 44}, {11, 35}, { -8, 72}, { -7, 51}},
{{11, 38}, {18, 25}, {2, 59}, { -4, 47}},
{{1, 45}, {12, 24}, { -1, 55}, { -6, 42}},
{{0, 46}, {13, 29}, { -7, 70}, { -3, 41}},
{{5, 44}, {13, 36}, { -6, 75}, { -6, 53}},
{{31, 17}, { -10, 93}, { -8, 89}, {8, 76}},
{{1, 51}, { -7, 73}, { -34, 119}, { -9, 78}},
{{7, 50}, { -2, 73}, { -3, 75}, { -11, 83}},
{{28, 19}, {13, 46}, {32, 20}, {9, 52}},
{{16, 33}, {9, 49}, {30, 22}, {0, 67}},
{{14, 62}, { -7, 100}, { -44, 127}, { -5, 90}},
{{ -13, 108}, {9, 53}, {0, 54}, {1, 67}},
{{ -15, 100}, {2, 53}, { -5, 61}, { -15, 72}},
{{ -13, 101}, {5, 53}, {0, 58}, { -5, 75}},
{{ -13, 91}, { -2, 61}, { -1, 60}, { -8, 80}},
{{ -12, 94}, {0, 56}, { -3, 61}, { -21, 83}},
{{ -10, 88}, {0, 56}, { -8, 67}, { -21, 64}},
{{ -16, 84}, { -13, 63}, { -25, 84}, { -13, 31}},
{{ -10, 86}, { -5, 60}, { -14, 74}, { -25, 64}},
{{ -7, 83}, { -1, 62}, { -5, 65}, { -29, 94}},
{{ -13, 87}, {4, 57}, {5, 52}, {9, 75}},
{{ -19, 94}, { -6, 69}, {2, 57}, {17, 63}},
{{1, 70}, {4, 57}, {0, 61}, { -8, 74}},
{{0, 72}, {14, 39}, { -9, 69}, { -5, 35}},
{{ -5, 74}, {4, 51}, { -11, 70}, { -2, 27}},
{{18, 59}, {13, 68}, {18, 55}, {13, 91}},
{{ -8, 102}, {3, 64}, { -4, 71}, {3, 65}},
{{ -15, 100}, {1, 61}, {0, 58}, { -7, 69}},
{{0, 95}, {9, 63}, {7, 61}, {8, 77}},
{{ -4, 75}, {7, 50}, {9, 41}, { -10, 66}},
{{2, 72}, {16, 39}, {18, 25}, {3, 62}},
{{ -11, 75}, {5, 44}, {9, 32}, { -3, 68}},
{{ -3, 71}, {4, 52}, {5, 43}, { -20, 81}},
{{15, 46}, {11, 48}, {9, 47}, {0, 30}},
{{ -13, 69}, { -5, 60}, {0, 44}, {1, 7}},
{{0, 62}, { -1, 59}, {0, 51}, { -3, 23}},
{{0, 65}, {0, 59}, {2, 46}, { -21, 74}},
{{21, 37}, {22, 33}, {19, 38}, {16, 66}},
{{ -15, 72}, {5, 44}, { -4, 66}, { -23, 124}},
{{9, 57}, {14, 43}, {15, 38}, {17, 37}},
{{16, 54}, { -1, 78}, {12, 42}, {44, -18}},
{{0, 62}, {0, 60}, {9, 34}, {50, -34}},
{{12, 72}, {9, 69}, {0, 89}, { -22, 127}},
//166-226 Table 9-20
{{24, 0}, {11, 28}, {4, 45}, {4, 39}},
{{15, 9}, {2, 40}, {10, 28}, {0, 42}},
{{8, 25}, {3, 44}, {10, 31}, {7, 34}},
{{13, 18}, {0, 49}, {33, -11}, {11, 29}},
{{15, 9}, {0, 46}, {52, -43}, {8, 31}},
{{13, 19}, {2, 44}, {18, 15}, {6, 37}},
{{10, 37}, {2, 51}, {28, 0}, {7, 42}},
{{12, 18}, {0, 47}, {35, -22}, {3, 40}},
{{6, 29}, {4, 39}, {38, -25}, {8, 33}},
{{20, 33}, {2, 62}, {34, 0}, {13, 43}},
{{15, 30}, {6, 46}, {39, -18}, {13, 36}},
{{4, 45}, {0, 54}, {32, -12}, {4, 47}},
{{1, 58}, {3, 54}, {102, -94}, {3, 55}},
{{0, 62}, {2, 58}, {0, 0}, {2, 58}},
{{7, 61}, {4, 63}, {56, -15}, {6, 60}},
{{12, 38}, {6, 51}, {33, -4}, {8, 44}},
{{11, 45}, {6, 57}, {29, 10}, {11, 44}},
{{15, 39}, {7, 53}, {37, -5}, {14, 42}},
{{11, 42}, {6, 52}, {51, -29}, {7, 48}},
{{13, 44}, {6, 55}, {39, -9}, {4, 56}},
{{16, 45}, {11, 45}, {52, -34}, {4, 52}},
{{12, 41}, {14, 36}, {69, -58}, {13, 37}},
{{10, 49}, {8, 53}, {67, -63}, {9, 49}},
{{30, 34}, { -1, 82}, {44, -5}, {19, 58}},
{{18, 42}, {7, 55}, {32, 7}, {10, 48}},
{{10, 55}, { -3, 78}, {55, -29}, {12, 45}},
{{17, 51}, {15, 46}, {32, 1}, {0, 69}},
{{17, 46}, {22, 31}, {0, 0}, {20, 33}},
{{0, 89}, { -1, 84}, {27, 36}, {8, 63}},
{{26, -19}, {25, 7}, {33, -25}, {35, -18}},
{{22, -17}, {30, -7}, {34, -30}, {33, -25}},
{{26, -17}, {28, 3}, {36, -28}, {28, -3}},
{{30, -25}, {28, 4}, {38, -28}, {24, 10}},
{{28, -20}, {32, 0}, {38, -27}, {27, 0}},
{{33, -23}, {34, -1}, {34, -18}, {34, -14}},
{{37, -27}, {30, 6}, {35, -16}, {52, -44}},
{{33, -23}, {30, 6}, {34, -14}, {39, -24}},
{{40, -28}, {32, 9}, {32, -8}, {19, 17}},
{{38, -17}, {31, 19}, {37, -6}, {31, 25}},
{{33, -11}, {26, 27}, {35, 0}, {36, 29}},
{{40, -15}, {26, 30}, {30, 10}, {24, 33}},
{{41, -6}, {37, 20}, {28, 18}, {34, 15}},
{{38, 1}, {28, 34}, {26, 25}, {30, 20}},
{{41, 17}, {17, 70}, {29, 41}, {22, 73}},
{{30, -6}, {1, 67}, {0, 75}, {20, 34}},
{{27, 3}, {5, 59}, {2, 72}, {19, 31}},
{{26, 22}, {9, 67}, {8, 77}, {27, 44}},
{{37, -16}, {16, 30}, {14, 35}, {19, 16}},
{{35, -4}, {18, 32}, {18, 31}, {15, 36}},
{{38, -8}, {18, 35}, {17, 35}, {15, 36}},
{{38, -3}, {22, 29}, {21, 30}, {21, 28}},
{{37, 3}, {24, 31}, {17, 45}, {25, 21}},
{{38, 5}, {23, 38}, {20, 42}, {30, 20}},
{{42, 0}, {18, 43}, {18, 45}, {31, 12}},
{{35, 16}, {20, 41}, {27, 26}, {27, 16}},
{{39, 22}, {11, 63}, {16, 54}, {24, 42}},
{{14, 48}, {9, 59}, {7, 66}, {0, 93}},
{{27, 37}, {9, 64}, {16, 56}, {14, 56}},
{{21, 60}, { -1, 94}, {11, 73}, {15, 57}},
{{12, 68}, { -2, 89}, {10, 67}, {26, 38}},
{{2, 97}, { -9, 108}, { -10, 116}, { -24, 127}},
//227-275 Table 9-21
{{ -3, 71}, { -6, 76}, { -23, 112}, { -24, 115}},
{{ -6, 42}, { -2, 44}, { -15, 71}, { -22, 82}},
{{ -5, 50}, {0, 45}, { -7, 61}, { -9, 62}},
{{ -3, 54}, {0, 52}, {0, 53}, {0, 53}},
{{ -2, 62}, { -3, 64}, { -5, 66}, {0, 59}},
{{0, 58}, { -2, 59}, { -11, 77}, { -14, 85}},
{{1, 63}, { -4, 70}, { -9, 80}, { -13, 89}},
{{ -2, 72}, { -4, 75}, { -9, 84}, { -13, 94}},
{{ -1, 74}, { -8, 82}, { -10, 87}, { -11, 92}},
{{ -9, 91}, { -17, 102}, { -34, 127}, { -29, 127}},
{{ -5, 67}, { -9, 77}, { -21, 101}, { -21, 100}},
{{ -5, 27}, {3, 24}, { -3, 39}, { -14, 57}},
{{ -3, 39}, {0, 42}, { -5, 53}, { -12, 67}},
{{ -2, 44}, {0, 48}, { -7, 61}, { -11, 71}},
{{0, 46}, {0, 55}, { -11, 75}, { -10, 77}},
{{ -16, 64}, { -6, 59}, { -15, 77}, { -21, 85}},
{{ -8, 68}, { -7, 71}, { -17, 91}, { -16, 88}},
{{ -10, 78}, { -12, 83}, { -25, 107}, { -23, 104}},
{{ -6, 77}, { -11, 87}, { -25, 111}, { -15, 98}},
{{ -10, 86}, { -30, 119}, { -28, 122}, { -37, 127}},
{{ -12, 92}, {1, 58}, { -11, 76}, { -10, 82}},
{{ -15, 55}, { -3, 29}, { -10, 44}, { -8, 48}},
{{ -10, 60}, { -1, 36}, { -10, 52}, { -8, 61}},
{{ -6, 62}, {1, 38}, { -10, 57}, { -8, 66}},
{{ -4, 65}, {2, 43}, { -9, 58}, { -7, 70}},
{{ -12, 73}, { -6, 55}, { -16, 72}, { -14, 75}},
{{ -8, 76}, {0, 58}, { -7, 69}, { -10, 79}},
{{ -7, 80}, {0, 64}, { -4, 69}, { -9, 83}},
{{ -9, 88}, { -3, 74}, { -5, 74}, { -12, 92}},
{{ -17, 110}, { -10, 90}, { -9, 86}, { -18, 108}},
{{ -11, 97}, {0, 70}, {2, 66}, { -4, 79}},
{{ -20, 84}, { -4, 29}, { -9, 34}, { -22, 69}},
{{ -11, 79}, {5, 31}, {1, 32}, { -16, 75}},
{{ -6, 73}, {7, 42}, {11, 31}, { -2, 58}},
{{ -4, 74}, {1, 59}, {5, 52}, {1, 58}},
{{ -13, 86}, { -2, 58}, { -2, 55}, { -13, 78}},
{{ -13, 96}, { -3, 72}, { -2, 67}, { -9, 83}},
{{ -11, 97}, { -3, 81}, {0, 73}, { -4, 81}},
{{ -19, 117}, { -11, 97}, { -8, 89}, { -13, 99}},
{{ -8, 78}, {0, 58}, {3, 52}, { -13, 81}},
{{ -5, 33}, {8, 5}, {7, 4}, { -6, 38}},
{{ -4, 48}, {10, 14}, {10, 8}, { -13, 62}},
{{ -2, 53}, {14, 18}, {17, 8}, { -6, 58}},
{{ -3, 62}, {13, 27}, {16, 19}, { -2, 59}},
{{ -13, 71}, {2, 40}, {3, 37}, { -16, 73}},
{{ -10, 79}, {0, 58}, { -1, 61}, { -10, 76}},
{{ -12, 86}, { -3, 70}, { -5, 73}, { -13, 86}},
{{ -13, 90}, { -6, 79}, { -1, 70}, { -9, 83}},
{{ -14, 97}, { -8, 85}, { -4, 78}, { -10, 87}},
//276 no use
{{CTX_NA, CTX_NA}, {CTX_NA, CTX_NA}, {CTX_NA, CTX_NA}, {CTX_NA, CTX_NA}},
//277-337 Table 9-22
{{ -6, 93}, { -13, 106}, { -21, 126}, { -22, 127}},
{{ -6, 84}, { -16, 106}, { -23, 124}, { -25, 127}},
{{ -8, 79}, { -10, 87}, { -20, 110}, { -25, 120}},
{{0, 66}, { -21, 114}, { -26, 126}, { -27, 127}},
{{ -1, 71}, { -18, 110}, { -25, 124}, { -19, 114}},
{{0, 62}, { -14, 98}, { -17, 105}, { -23, 117}},
{{ -2, 60}, { -22, 110}, { -27, 121}, { -25, 118}},
{{ -2, 59}, { -21, 106}, { -27, 117}, { -26, 117}},
{{ -5, 75}, { -18, 103}, { -17, 102}, { -24, 113}},
{{ -3, 62}, { -21, 107}, { -26, 117}, { -28, 118}},
{{ -4, 58}, { -23, 108}, { -27, 116}, { -31, 120}},
{{ -9, 66}, { -26, 112}, { -33, 122}, { -37, 124}},
{{ -1, 79}, { -10, 96}, { -10, 95}, { -10, 94}},
{{0, 71}, { -12, 95}, { -14, 100}, { -15, 102}},
{{3, 68}, { -5, 91}, { -8, 95}, { -10, 99}},
{{10, 44}, { -9, 93}, { -17, 111}, { -13, 106}},
{{ -7, 62}, { -22, 94}, { -28, 114}, { -50, 127}},
{{15, 36}, { -5, 86}, { -6, 89}, { -5, 92}},
{{14, 40}, {9, 67}, { -2, 80}, {17, 57}},
{{16, 27}, { -4, 80}, { -4, 82}, { -5, 86}},
{{12, 29}, { -10, 85}, { -9, 85}, { -13, 94}},
{{1, 44}, { -1, 70}, { -8, 81}, { -12, 91}},
{{20, 36}, {7, 60}, { -1, 72}, { -2, 77}},
{{18, 32}, {9, 58}, {5, 64}, {0, 71}},
{{5, 42}, {5, 61}, {1, 67}, { -1, 73}},
{{1, 48}, {12, 50}, {9, 56}, {4, 64}},
{{10, 62}, {15, 50}, {0, 69}, { -7, 81}},
{{17, 46}, {18, 49}, {1, 69}, {5, 64}},
{{9, 64}, {17, 54}, {7, 69}, {15, 57}},
{{ -12, 104}, {10, 41}, { -7, 69}, {1, 67}},
{{ -11, 97}, {7, 46}, { -6, 67}, {0, 68}},
{{ -16, 96}, { -1, 51}, { -16, 77}, { -10, 67}},
{{ -7, 88}, {7, 49}, { -2, 64}, {1, 68}},
{{ -8, 85}, {8, 52}, {2, 61}, {0, 77}},
{{ -7, 85}, {9, 41}, { -6, 67}, {2, 64}},
{{ -9, 85}, {6, 47}, { -3, 64}, {0, 68}},
{{ -13, 88}, {2, 55}, {2, 57}, { -5, 78}},
{{4, 66}, {13, 41}, { -3, 65}, {7, 55}},
{{ -3, 77}, {10, 44}, { -3, 66}, {5, 59}},
{{ -3, 76}, {6, 50}, {0, 62}, {2, 65}},
{{ -6, 76}, {5, 53}, {9, 51}, {14, 54}},
{{10, 58}, {13, 49}, { -1, 66}, {15, 44}},
{{ -1, 76}, {4, 63}, { -2, 71}, {5, 60}},
{{ -1, 83}, {6, 64}, { -2, 75}, {2, 70}},
{{ -7, 99}, { -2, 69}, { -1, 70}, { -2, 76}},
{{ -14, 95}, { -2, 59}, { -9, 72}, { -18, 86}},
{{2, 95}, {6, 70}, {14, 60}, {12, 70}},
{{0, 76}, {10, 44}, {16, 37}, {5, 64}},
{{ -5, 74}, {9, 31}, {0, 47}, { -12, 70}},
{{0, 70}, {12, 43}, {18, 35}, {11, 55}},
{{ -11, 75}, {3, 53}, {11, 37}, {5, 56}},
{{1, 68}, {14, 34}, {12, 41}, {0, 69}},
{{0, 65}, {10, 38}, {10, 41}, {2, 65}},
{{ -14, 73}, { -3, 52}, {2, 48}, { -6, 74}},
{{3, 62}, {13, 40}, {12, 41}, {5, 54}},
{{4, 62}, {17, 32}, {13, 41}, {7, 54}},
{{ -1, 68}, {7, 44}, {0, 59}, { -6, 76}},
{{ -13, 75}, {7, 38}, {3, 50}, { -11, 82}},
{{11, 55}, {13, 50}, {19, 40}, { -2, 77}},
{{5, 64}, {10, 57}, {3, 66}, { -2, 77}},
{{12, 70}, {26, 43}, {18, 50}, {25, 42}},
//338-398 Table9-23
{{15, 6}, {14, 11}, {19, -6}, {17, -13}},
{{6, 19}, {11, 14}, {18, -6}, {16, -9}},
{{7, 16}, {9, 11}, {14, 0}, {17, -12}},
{{12, 14}, {18, 11}, {26, -12}, {27, -21}},
{{18, 13}, {21, 9}, {31, -16}, {37, -30}},
{{13, 11}, {23, -2}, {33, -25}, {41, -40}},
{{13, 15}, {32, -15}, {33, -22}, {42, -41}},
{{15, 16}, {32, -15}, {37, -28}, {48, -47}},
{{12, 23}, {34, -21}, {39, -30}, {39, -32}},
{{13, 23}, {39, -23}, {42, -30}, {46, -40}},
{{15, 20}, {42, -33}, {47, -42}, {52, -51}},
{{14, 26}, {41, -31}, {45, -36}, {46, -41}},
{{14, 44}, {46, -28}, {49, -34}, {52, -39}},
{{17, 40}, {38, -12}, {41, -17}, {43, -19}},
{{17, 47}, {21, 29}, {32, 9}, {32, 11}},
{{24, 17}, {45, -24}, {69, -71}, {61, -55}},
{{21, 21}, {53, -45}, {63, -63}, {56, -46}},
{{25, 22}, {48, -26}, {66, -64}, {62, -50}},
{{31, 27}, {65, -43}, {77, -74}, {81, -67}},
{{22, 29}, {43, -19}, {54, -39}, {45, -20}},
{{19, 35}, {39, -10}, {52, -35}, {35, -2}},
{{14, 50}, {30, 9}, {41, -10}, {28, 15}},
{{10, 57}, {18, 26}, {36, 0}, {34, 1}},
{{7, 63}, {20, 27}, {40, -1}, {39, 1}},
{{ -2, 77}, {0, 57}, {30, 14}, {30, 17}},
{{ -4, 82}, { -14, 82}, {28, 26}, {20, 38}},
{{ -3, 94}, { -5, 75}, {23, 37}, {18, 45}},
{{9, 69}, { -19, 97}, {12, 55}, {15, 54}},
{{ -12, 109}, { -35, 125}, {11, 65}, {0, 79}},
{{36, -35}, {27, 0}, {37, -33}, {36, -16}},
{{36, -34}, {28, 0}, {39, -36}, {37, -14}},
{{32, -26}, {31, -4}, {40, -37}, {37, -17}},
{{37, -30}, {27, 6}, {38, -30}, {32, 1}},
{{44, -32}, {34, 8}, {46, -33}, {34, 15}},
{{34, -18}, {30, 10}, {42, -30}, {29, 15}},
{{34, -15}, {24, 22}, {40, -24}, {24, 25}},
{{40, -15}, {33, 19}, {49, -29}, {34, 22}},
{{33, -7}, {22, 32}, {38, -12}, {31, 16}},
{{35, -5}, {26, 31}, {40, -10}, {35, 18}},
{{33, 0}, {21, 41}, {38, -3}, {31, 28}},
{{38, 2}, {26, 44}, {46, -5}, {33, 41}},
{{33, 13}, {23, 47}, {31, 20}, {36, 28}},
{{23, 35}, {16, 65}, {29, 30}, {27, 47}},
{{13, 58}, {14, 71}, {25, 44}, {21, 62}},
{{29, -3}, {8, 60}, {12, 48}, {18, 31}},
{{26, 0}, {6, 63}, {11, 49}, {19, 26}},
{{22, 30}, {17, 65}, {26, 45}, {36, 24}},
{{31, -7}, {21, 24}, {22, 22}, {24, 23}},
{{35, -15}, {23, 20}, {23, 22}, {27, 16}},
{{34, -3}, {26, 23}, {27, 21}, {24, 30}},
{{34, 3}, {27, 32}, {33, 20}, {31, 29}},
{{36, -1}, {28, 23}, {26, 28}, {22, 41}},
{{34, 5}, {28, 24}, {30, 24}, {22, 42}},
{{32, 11}, {23, 40}, {27, 34}, {16, 60}},
{{35, 5}, {24, 32}, {18, 42}, {15, 52}},
{{34, 12}, {28, 29}, {25, 39}, {14, 60}},
{{39, 11}, {23, 42}, {18, 50}, {3, 78}},
{{30, 29}, {19, 57}, {12, 70}, { -16, 123}},
{{34, 26}, {22, 53}, {21, 54}, {21, 53}},
{{29, 39}, {22, 61}, {14, 71}, {22, 56}},
{{19, 66}, {11, 86}, {11, 83}, {25, 61}},
{{31, 21}, {12, 40}, {25, 32}, {21, 33}},
{{31, 31}, {11, 51}, {21, 49}, {19, 50}},
{{25, 50}, {14, 59}, {21, 54}, {17, 61}},
//402-459 Table 9-24
{{ -17, 120}, { -4, 79}, { -5, 85}, { -3, 78}},
{{ -20, 112}, { -7, 71}, { -6, 81}, { -8, 74}},
{{ -18, 114}, { -5, 69}, { -10, 77}, { -9, 72}},
{{ -11, 85}, { -9, 70}, { -7, 81}, { -10, 72}},
{{ -15, 92}, { -8, 66}, { -17, 80}, { -18, 75}},
{{ -14, 89}, { -10, 68}, { -18, 73}, { -12, 71}},
{{ -26, 71}, { -19, 73}, { -4, 74}, { -11, 63}},
{{ -15, 81}, { -12, 69}, { -10, 83}, { -5, 70}},
{{ -14, 80}, { -16, 70}, { -9, 71}, { -17, 75}},
{{0, 68}, { -15, 67}, { -9, 67}, { -14, 72}},
{{ -14, 70}, { -20, 62}, { -1, 61}, { -16, 67}},
{{ -24, 56}, { -19, 70}, { -8, 66}, { -8, 53}},
{{ -23, 68}, { -16, 66}, { -14, 66}, { -14, 59}},
{{ -24, 50}, { -22, 65}, {0, 59}, { -9, 52}},
{{ -11, 74}, { -20, 63}, {2, 59}, { -11, 68}},
{{23, -13}, {9, -2}, {17, -10}, {9, -2}},
{{26, -13}, {26, -9}, {32, -13}, {30, -10}},
{{40, -15}, {33, -9}, {42, -9}, {31, -4}},
{{49, -14}, {39, -7}, {49, -5}, {33, -1}},
{{44, 3}, {41, -2}, {53, 0}, {33, 7}},
{{45, 6}, {45, 3}, {64, 3}, {31, 12}},
{{44, 34}, {49, 9}, {68, 10}, {37, 23}},
{{33, 54}, {45, 27}, {66, 27}, {31, 38}},
{{19, 82}, {36, 59}, {47, 57}, {20, 64}},
{{ -3, 75}, { -6, 66}, { -5, 71}, { -9, 71}},
{{ -1, 23}, { -7, 35}, {0, 24}, { -7, 37}},
{{1, 34}, { -7, 42}, { -1, 36}, { -8, 44}},
{{1, 43}, { -8, 45}, { -2, 42}, { -11, 49}},
{{0, 54}, { -5, 48}, { -2, 52}, { -10, 56}},
{{ -2, 55}, { -12, 56}, { -9, 57}, { -12, 59}},
{{0, 61}, { -6, 60}, { -6, 63}, { -8, 63}},
{{1, 64}, { -5, 62}, { -4, 65}, { -9, 67}},
{{0, 68}, { -8, 66}, { -4, 67}, { -6, 68}},
{{ -9, 92}, { -8, 76}, { -7, 82}, { -10, 79}},
{{ -14, 106}, { -5, 85}, { -3, 81}, { -3, 78}},
{{ -13, 97}, { -6, 81}, { -3, 76}, { -8, 74}},
{{ -15, 90}, { -10, 77}, { -7, 72}, { -9, 72}},
{{ -12, 90}, { -7, 81}, { -6, 78}, { -10, 72}},
{{ -18, 88}, { -17, 80}, { -12, 72}, { -18, 75}},
{{ -10, 73}, { -18, 73}, { -14, 68}, { -12, 71}},
{{ -9, 79}, { -4, 74}, { -3, 70}, { -11, 63}},
{{ -14, 86}, { -10, 83}, { -6, 76}, { -5, 70}},
{{ -10, 73}, { -9, 71}, { -5, 66}, { -17, 75}},
{{ -10, 70}, { -9, 67}, { -5, 62}, { -14, 72}},
{{ -10, 69}, { -1, 61}, {0, 57}, { -16, 67}},
{{ -5, 66}, { -8, 66}, { -4, 61}, { -8, 53}},
{{ -9, 64}, { -14, 66}, { -9, 60}, { -14, 59}},
{{ -5, 58}, {0, 59}, {1, 54}, { -9, 52}},
{{2, 59}, {2, 59}, {2, 58}, { -11, 68}},
{{21, -10}, {21, -13}, {17, -10}, {9, -2}},
{{24, -11}, {33, -14}, {32, -13}, {30, -10}},
{{28, -8}, {39, -7}, {42, -9}, {31, -4}},
{{28, -1}, {46, -2}, {49, -5}, {33, -1}},
{{29, 3}, {51, 2}, {53, 0}, {33, 7}},
{{29, 9}, {60, 6}, {64, 3}, {31, 12}},
{{35, 20}, {61, 17}, {68, 10}, {37, 23}},
{{29, 36}, {55, 34}, {66, 27}, {31, 38}},
{{14, 67}, {42, 62}, {47, 57}, {20, 64}},
};
/*Table 9-44 Specification of rangeTabLPS depending on pStateIdx and qCodIRangeIdx */
const uint8_t g_kuiCabacRangeLps[64][4] = {
{ 128, 176, 208, 240}, { 128, 167, 197, 227}, { 128, 158, 187, 216}, { 123, 150, 178, 205}, { 116, 142, 169, 195}, { 111, 135, 160, 185}, { 105, 128, 152, 175}, { 100, 122, 144, 166},
{ 95, 116, 137, 158}, { 90, 110, 130, 150}, { 85, 104, 123, 142}, { 81, 99, 117, 135}, { 77, 94, 111, 128}, { 73, 89, 105, 122}, { 69, 85, 100, 116}, { 66, 80, 95, 110},
{ 62, 76, 90, 104}, { 59, 72, 86, 99}, { 56, 69, 81, 94}, { 53, 65, 77, 89}, { 51, 62, 73, 85}, { 48, 59, 69, 80}, { 46, 56, 66, 76}, { 43, 53, 63, 72},
{ 41, 50, 59, 69}, { 39, 48, 56, 65}, { 37, 45, 54, 62}, { 35, 43, 51, 59}, { 33, 41, 48, 56}, { 32, 39, 46, 53}, { 30, 37, 43, 50}, { 29, 35, 41, 48},
{ 27, 33, 39, 45}, { 26, 31, 37, 43}, { 24, 30, 35, 41}, { 23, 28, 33, 39}, { 22, 27, 32, 37}, { 21, 26, 30, 35}, { 20, 24, 29, 33}, { 19, 23, 27, 31},
{ 18, 22, 26, 30}, { 17, 21, 25, 28}, { 16, 20, 23, 27}, { 15, 19, 22, 25}, { 14, 18, 21, 24}, { 14, 17, 20, 23}, { 13, 16, 19, 22}, { 12, 15, 18, 21},
{ 12, 14, 17, 20}, { 11, 14, 16, 19}, { 11, 13, 15, 18}, { 10, 12, 15, 17}, { 10, 12, 14, 16}, { 9, 11, 13, 15}, { 9, 11, 12, 14}, { 8, 10, 12, 14},
{ 8, 9, 11, 13}, { 7, 9, 11, 12}, { 7, 9, 10, 12}, { 7, 8, 10, 11}, { 6, 8, 9, 11}, { 6, 7, 9, 10}, { 6, 7, 8, 9}, { 2, 2, 2, 2}
};
/*Table 9-45 State transition table*/
const uint8_t g_kuiStateTransTable[64][2] = {
{0, 1}, {0, 2}, {1, 3}, {2, 4}, {2, 5}, {4, 6}, {4, 7}, {5, 8}, {6, 9}, {7, 10},
{8, 11}, {9, 12}, {9, 13}, {11, 14}, {11, 15}, {12, 16}, {13, 17}, {13, 18}, {15, 19}, {15, 20},
{16, 21}, {16, 22}, {18, 23}, {18, 24}, {19, 25}, {19, 26}, {21, 27}, {21, 28}, {22, 29}, {22, 30},
{23, 31}, {24, 32}, {24, 33}, {25, 34}, {26, 35}, {26, 36}, {27, 37}, {27, 38}, {28, 39}, {29, 40},
{29, 41}, {30, 42}, {30, 43}, {30, 44}, {31, 45}, {32, 46}, {32, 47}, {33, 48}, {33, 49}, {33, 50},
{34, 51}, {34, 52}, {35, 53}, {35, 54}, {35, 55}, {36, 56}, {36, 57}, {36, 58}, {37, 59}, {37, 60},
{37, 61}, {38, 62}, {38, 62}, {63, 63}
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}

View File

@@ -51,7 +51,6 @@
#endif //!_MSC_VER
#else
#include <sys/time.h>
#include <sys/timeb.h>
#endif //_WIN32
#include "macros.h"

View File

@@ -1,6 +1,6 @@
/*!
* \copy
* Copyright (c) 2013, Cisco Systems
* Copyright (c) 2009-2013, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,12 +28,21 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* \file get_intra_predictor.c
*
* \brief implementation for get intra predictor about 16x16, 4x4, chroma.
*
* \date 4/2/2009 Created
* 9/14/2009 C level based optimization with high performance gained.
* [const, using ST32/ST64 to replace memset, memcpy and memmove etc.]
*
*************************************************************************************
*/
#include "common.h"
#include "ls_defines.h"
#include "cpu_core.h"
#include "intra_pred_common.h"
WELSVP_NAMESPACE_BEGIN
void WelsI16x16LumaPredV_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStride) {
uint8_t i = 15;
@@ -66,4 +75,3 @@ void WelsI16x16LumaPredH_c (uint8_t* pPred, uint8_t* pRef, const int32_t kiStrid
} while (i-- > 0);
}
WELSVP_NAMESPACE_END

View File

@@ -136,4 +136,4 @@ void WelsSampleSadFour4x4_c (uint8_t* iSample1, int32_t iStride1, uint8_t* iSamp
* (pSad + 1) = WelsSampleSad4x4_c (iSample1, iStride1, (iSample2 + iStride2), iStride2);
* (pSad + 2) = WelsSampleSad4x4_c (iSample1, iStride1, (iSample2 - 1), iStride2);
* (pSad + 3) = WelsSampleSad4x4_c (iSample1, iStride1, (iSample2 + 1), iStride2);
}
}

View File

@@ -53,22 +53,22 @@ void WelsLog (SLogContext* logCtx, int32_t iLevel, const char* kpFmt, ...) {
char pTraceTag[MAX_LOG_SIZE];
switch (iLevel) {
case WELS_LOG_ERROR:
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] Error:");
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] this = 0x%p, Error:", logCtx->pCodecInstance);
break;
case WELS_LOG_WARNING:
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] Warning:");
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] this = 0x%p, Warning:", logCtx->pCodecInstance);
break;
case WELS_LOG_INFO:
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] Info:");
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] this = 0x%p, Info:", logCtx->pCodecInstance);
break;
case WELS_LOG_DEBUG:
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] Debug:");
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] this = 0x%p, Debug:", logCtx->pCodecInstance);
break;
default:
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] Detail:");
WelsSnprintf (pTraceTag, MAX_LOG_SIZE, "[OpenH264] this = 0x%p, Detail:", logCtx->pCodecInstance);
break;
}
WelsStrcat(pTraceTag,MAX_LOG_SIZE,kpFmt);
WelsStrcat (pTraceTag, MAX_LOG_SIZE, kpFmt);
va_start (vl, kpFmt);
logCtx->pfLog (logCtx->pLogCtx, iLevel, pTraceTag, vl);
va_end (vl);

View File

@@ -47,7 +47,7 @@
static void welsStderrTrace (void* ctx, int level, const char* string) {
fprintf (stderr, "%s", string);
fprintf (stderr, "%s\n", string);
}
welsCodecTrace::welsCodecTrace() {
@@ -78,8 +78,13 @@ void welsCodecTrace::CodecTrace (const int32_t iLevel, const char* Str_Format, v
char pBuf[MAX_LOG_SIZE] = {0};
WelsVsnprintf (pBuf, MAX_LOG_SIZE, Str_Format, vl); // confirmed_safe_unsafe_usage
if (m_fpTrace) {
m_fpTrace (m_pTraceCtx, iLevel, pBuf);
}
}
m_fpTrace (m_pTraceCtx, iLevel, pBuf);
void welsCodecTrace::SetCodecInstance (void* pCodecInstance) {
m_sLogCtx.pCodecInstance = pCodecInstance;
}
void welsCodecTrace::SetTraceLevel (const int32_t iLevel) {

View File

@@ -6,6 +6,7 @@ COMMON_CPP_SRCS=\
$(COMMON_SRCDIR)/src/crt_util_safe_x.cpp\
$(COMMON_SRCDIR)/src/deblocking_common.cpp\
$(COMMON_SRCDIR)/src/expand_pic.cpp\
$(COMMON_SRCDIR)/src/intra_pred_common.cpp\
$(COMMON_SRCDIR)/src/sad_common.cpp\
$(COMMON_SRCDIR)/src/utils.cpp\
$(COMMON_SRCDIR)/src/welsCodecTrace.cpp\
@@ -13,41 +14,51 @@ COMMON_CPP_SRCS=\
COMMON_OBJS += $(COMMON_CPP_SRCS:.cpp=.$(OBJ))
ifeq ($(ASM_ARCH), x86)
COMMON_ASM_SRCS=\
$(COMMON_SRCDIR)/x86/cpuid.asm\
$(COMMON_SRCDIR)/x86/deblock.asm\
$(COMMON_SRCDIR)/x86/expand_picture.asm\
$(COMMON_SRCDIR)/x86/intra_pred_com.asm\
$(COMMON_SRCDIR)/x86/mb_copy.asm\
$(COMMON_SRCDIR)/x86/mc_chroma.asm\
$(COMMON_SRCDIR)/x86/mc_luma.asm\
$(COMMON_SRCDIR)/x86/satd_sad.asm\
$(COMMON_SRCDIR)/x86/vaa.asm\
COMMON_OBJS += $(COMMON_ASM_SRCS:.asm=.$(OBJ))
COMMON_OBJSASM += $(COMMON_ASM_SRCS:.asm=.$(OBJ))
ifeq ($(ASM_ARCH), x86)
COMMON_OBJS += $(COMMON_OBJSASM)
endif
OBJS += $(COMMON_OBJSASM)
ifeq ($(ASM_ARCH), arm)
COMMON_ASM_ARM_SRCS=\
$(COMMON_SRCDIR)/arm/copy_mb_neon.S\
$(COMMON_SRCDIR)/arm/deblocking_neon.S\
$(COMMON_SRCDIR)/arm/expand_picture_neon.S\
$(COMMON_SRCDIR)/arm/intra_pred_common_neon.S\
$(COMMON_SRCDIR)/arm/mc_neon.S\
COMMON_OBJS += $(COMMON_ASM_ARM_SRCS:.S=.$(OBJ))
COMMON_OBJSARM += $(COMMON_ASM_ARM_SRCS:.S=.$(OBJ))
ifeq ($(ASM_ARCH), arm)
COMMON_OBJS += $(COMMON_OBJSARM)
endif
OBJS += $(COMMON_OBJSARM)
ifeq ($(ASM_ARCH), arm64)
COMMON_ASM_ARM64_SRCS=\
$(COMMON_SRCDIR)/arm64/copy_mb_aarch64_neon.S\
$(COMMON_SRCDIR)/arm64/deblocking_aarch64_neon.S\
$(COMMON_SRCDIR)/arm64/expand_picture_aarch64_neon.S\
$(COMMON_SRCDIR)/arm64/intra_pred_common_aarch64_neon.S\
$(COMMON_SRCDIR)/arm64/mc_aarch64_neon.S\
COMMON_OBJS += $(COMMON_ASM_ARM64_SRCS:.S=.$(OBJ))
COMMON_OBJSARM64 += $(COMMON_ASM_ARM64_SRCS:.S=.$(OBJ))
ifeq ($(ASM_ARCH), arm64)
COMMON_OBJS += $(COMMON_OBJSARM64)
endif
OBJS += $(COMMON_OBJSARM64)
OBJS += $(COMMON_OBJS)
$(COMMON_SRCDIR)/%.$(OBJ): $(COMMON_SRCDIR)/%.cpp
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c $(CXX_O) $<

View File

@@ -116,6 +116,10 @@ BITS 64
BITS 64
%ifidn __OUTPUT_FORMAT__,elf64
SECTION .note.GNU-stack noalloc noexec nowrite progbits ; Mark the stack as non-executable
%endif
%define arg1 rdi
%define arg2 rsi
%define arg3 rdx
@@ -166,6 +170,10 @@ BITS 64
BITS 32
%ifidn __OUTPUT_FORMAT__,elf
SECTION .note.GNU-stack noalloc noexec nowrite progbits ; Mark the stack as non-executable
%endif
%define arg1 [esp + push_num*4 + 4]
%define arg2 [esp + push_num*4 + 8]
%define arg3 [esp + push_num*4 + 12]

View File

@@ -0,0 +1,117 @@
;*!
;* \copy
;* Copyright (c) 2009-2013, Cisco Systems
;* All rights reserved.
;*
;* Redistribution and use in source and binary forms, with or without
;* modification, are permitted provided that the following conditions
;* are met:
;*
;* * Redistributions of source code must retain the above copyright
;* notice, this list of conditions and the following disclaimer.
;*
;* * Redistributions in binary form must reproduce the above copyright
;* notice, this list of conditions and the following disclaimer in
;* the documentation and/or other materials provided with the
;* distribution.
;*
;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
;* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
;* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
;* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
;* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
;* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
;* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
;* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
;* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
;* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;* POSSIBILITY OF SUCH DAMAGE.
;*
;*
;* intra_pred_common.asm
;*
;* Abstract
;* sse2 function for intra predict operations
;*
;* History
;* 18/09/2009 Created
;*
;*
;*************************************************************************/
%include "asm_inc.asm"
;***********************************************************************
; Code
;***********************************************************************
SECTION .text
;***********************************************************************
; void WelsI16x16LumaPredH_sse2(uint8_t *pred, uint8_t *pRef, int32_t stride);
;***********************************************************************
%macro SSE2_PRED_H_16X16_ONE_LINE 0
add r0, 16
add r1, r2
movzx r3, byte [r1]
SSE2_Copy16Times xmm0, r3d
movdqa [r0], xmm0
%endmacro
WELS_EXTERN WelsI16x16LumaPredH_sse2
push r3
%assign push_num 1
LOAD_3_PARA
SIGN_EXTENSION r2, r2d
dec r1
movzx r3, byte [r1]
SSE2_Copy16Times xmm0, r3d
movdqa [r0], xmm0
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
SSE2_PRED_H_16X16_ONE_LINE
pop r3
ret
;***********************************************************************
; void WelsI16x16LumaPredV_sse2(uint8_t *pred, uint8_t *pRef, int32_t stride);
;***********************************************************************
WELS_EXTERN WelsI16x16LumaPredV_sse2
%assign push_num 0
LOAD_3_PARA
SIGN_EXTENSION r2, r2d
sub r1, r2
movdqa xmm0, [r1]
movdqa [r0], xmm0
movdqa [r0+10h], xmm0
movdqa [r0+20h], xmm0
movdqa [r0+30h], xmm0
movdqa [r0+40h], xmm0
movdqa [r0+50h], xmm0
movdqa [r0+60h], xmm0
movdqa [r0+70h], xmm0
movdqa [r0+80h], xmm0
movdqa [r0+90h], xmm0
movdqa [r0+160], xmm0
movdqa [r0+176], xmm0
movdqa [r0+192], xmm0
movdqa [r0+208], xmm0
movdqa [r0+224], xmm0
movdqa [r0+240], xmm0
ret

View File

@@ -42,26 +42,25 @@
#include <stdlib.h>
#include <string>
using namespace std;
class CReadConfig {
public:
CReadConfig();
CReadConfig (const char* pConfigFileName);
CReadConfig (const string& pConfigFileName);
CReadConfig (const std::string& pConfigFileName);
virtual ~CReadConfig();
void Openf (const char* strFile);
long ReadLine (string* strVal, const int iValSize = 4);
long ReadLine (std::string* strVal, const int iValSize = 4);
const bool EndOfFile();
const int GetLines();
const bool ExistFile();
const string& GetFileName();
const std::string& GetFileName();
private:
FILE* m_pCfgFile;
string m_strCfgFileName;
std::string m_strCfgFileName;
unsigned int m_iLines;
};

View File

@@ -58,7 +58,7 @@ CReadConfig::CReadConfig (const char* kpConfigFileName)
}
}
CReadConfig::CReadConfig (const string& kpConfigFileName)
CReadConfig::CReadConfig (const std::string& kpConfigFileName)
: m_pCfgFile (0)
, m_strCfgFileName (kpConfigFileName)
, m_iLines (0) {
@@ -81,11 +81,11 @@ void CReadConfig::Openf (const char* kpStrFile) {
}
}
long CReadConfig::ReadLine (string* pVal, const int kiValSize/* = 4*/) {
long CReadConfig::ReadLine (std::string* pVal, const int kiValSize/* = 4*/) {
if (m_pCfgFile == NULL || pVal == NULL || kiValSize <= 1)
return 0;
string* strTags = &pVal[0];
std::string* strTags = &pVal[0];
int nTagNum = 0, n = 0;
bool bCommentFlag = false;
@@ -134,6 +134,6 @@ const bool CReadConfig::ExistFile() {
return (m_pCfgFile != NULL);
}
const string& CReadConfig::GetFileName() {
const std::string& CReadConfig::GetFileName() {
return m_strCfgFileName;
}

View File

@@ -5,6 +5,7 @@ CONSOLE_COMMON_CPP_SRCS=\
CONSOLE_COMMON_OBJS += $(CONSOLE_COMMON_CPP_SRCS:.cpp=.$(OBJ))
OBJS += $(CONSOLE_COMMON_OBJS)
$(CONSOLE_COMMON_SRCDIR)/%.$(OBJ): $(CONSOLE_COMMON_SRCDIR)/%.cpp
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(CONSOLE_COMMON_CFLAGS) $(CONSOLE_COMMON_INCLUDES) -c $(CXX_O) $<

View File

@@ -336,6 +336,7 @@ HRESULT CD3D9ExUtils::Render (void* pDst[3], SBufferInfo* pInfo) {
|| m_nHeight != pInfo->UsrData.sSystemBuffer.iHeight) {
m_nWidth = pInfo->UsrData.sSystemBuffer.iWidth;
m_nHeight = pInfo->UsrData.sSystemBuffer.iHeight;
MoveWindow(m_hWnd,0,0,pInfo->UsrData.sSystemBuffer.iWidth,pInfo->UsrData.sSystemBuffer.iHeight,true);
SAFE_RELEASE (m_lpD3D9RawSurfaceShare);
SAFE_RELEASE (m_lpD3D9Device);
}

View File

@@ -63,12 +63,18 @@ using namespace std;
//using namespace WelsDec;
//#define STICK_STREAM_SIZE // For Demo interfaces test with track file of integrated frames
//#define NO_DELAY_DECODING // For Demo interfaces test with no delay decoding
void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, const char* kpOuputFileName,
int32_t& iWidth, int32_t& iHeight, const char* pOptionFileName) {
FILE* pH264File = NULL;
FILE* pYuvFile = NULL;
FILE* pOptionFile = NULL;
#if defined ( STICK_STREAM_SIZE )
FILE* fpTrack = fopen ("3.len", "rb");
unsigned long pInfo[4];
#endif// STICK_STREAM_SIZE
unsigned long long uiTimeStamp = 0;
int64_t iStart = 0, iEnd = 0, iTotal = 0;
int32_t iSliceSize;
int32_t iSliceIndex = 0;
@@ -153,12 +159,6 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
goto label_exit;
}
#if defined ( STICK_STREAM_SIZE )
FILE* fpTrack = fopen ("3.len", "rb");
#endif// STICK_STREAM_SIZE
while (true) {
if (iBufPos >= iFileSize) {
@@ -169,8 +169,10 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
}
#if defined ( STICK_STREAM_SIZE )
if (fpTrack)
fread (&iSliceSize, 1, sizeof (int32_t), fpTrack);
if (fpTrack) {
fread (pInfo, 4, sizeof (unsigned long), fpTrack);
iSliceSize = static_cast<int32_t>(pInfo[2]);
}
#else
for (i = 0; i < iFileSize; i++) {
if ((pBuf[iBufPos + i] == 0 && pBuf[iBufPos + i + 1] == 0 && pBuf[iBufPos + i + 2] == 0 && pBuf[iBufPos + i + 3] == 1
@@ -198,7 +200,7 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
pDecoder->GetOption (DECODER_OPTION_VCL_NAL, &iFeedbackVclNalInAu);
int32_t iFeedbackTidInAu;
pDecoder->GetOption (DECODER_OPTION_TEMPORAL_ID, &iFeedbackTidInAu);
int32_t iErrorConMethod = ERROR_CON_SLICE_COPY;
int32_t iErrorConMethod = (int32_t) ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE;
pDecoder->SetOption (DECODER_OPTION_ERROR_CON_IDC, &iErrorConMethod);
//~end for
@@ -206,8 +208,9 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
pData[0] = NULL;
pData[1] = NULL;
pData[2] = NULL;
uiTimeStamp ++;
memset (&sDstBufInfo, 0, sizeof (SBufferInfo));
sDstBufInfo.uiInBsTimeStamp = uiTimeStamp;
pDecoder->DecodeFrame2 (pBuf + iBufPos, iSliceSize, pData, &sDstBufInfo);
if (sDstBufInfo.iBufferStatus == 1) {
@@ -234,6 +237,38 @@ void H264DecodeInstance (ISVCDecoder* pDecoder, const char* kpH264FileName, cons
++ iFrameCount;
}
#ifdef NO_DELAY_DECODING
iStart = WelsTime();
pData[0] = NULL;
pData[1] = NULL;
pData[2] = NULL;
memset (&sDstBufInfo, 0, sizeof (SBufferInfo));
sDstBufInfo.uiInBsTimeStamp = uiTimeStamp;
pDecoder->DecodeFrame2 (NULL, 0, pData, &sDstBufInfo);
if (sDstBufInfo.iBufferStatus == 1) {
pDst[0] = pData[0];
pDst[1] = pData[1];
pDst[2] = pData[2];
}
iEnd = WelsTime();
iTotal += iEnd - iStart;
if (sDstBufInfo.iBufferStatus == 1) {
cOutputModule.Process ((void**)pDst, &sDstBufInfo, pYuvFile);
iWidth = sDstBufInfo.UsrData.sSystemBuffer.iWidth;
iHeight = sDstBufInfo.UsrData.sSystemBuffer.iHeight;
if (pOptionFile != NULL) {
if (iWidth != iLastWidth && iHeight != iLastHeight) {
fwrite (&iFrameCount, sizeof (iFrameCount), 1, pOptionFile);
fwrite (&iWidth , sizeof (iWidth) , 1, pOptionFile);
fwrite (&iHeight, sizeof (iHeight), 1, pOptionFile);
iLastWidth = iWidth;
iLastHeight = iHeight;
}
}
++ iFrameCount;
}
#endif
iBufPos += iSliceSize;
++ iSliceIndex;
}
@@ -349,9 +384,9 @@ int32_t main (int32_t iArgC, char* pArgV[]) {
} else if (strTag[0].compare ("TargetDQID") == 0) {
sDecParam.uiTargetDqLayer = (uint8_t)atol (strTag[1].c_str());
} else if (strTag[0].compare ("OutColorFormat") == 0) {
sDecParam.iOutputColorFormat = atoi (strTag[1].c_str());
} else if (strTag[0].compare ("ErrorConcealmentFlag") == 0) {
sDecParam.uiEcActiveFlag = (uint8_t)atol (strTag[1].c_str());
sDecParam.eOutputColorFormat = (EVideoFormatType) atoi (strTag[1].c_str());
} else if (strTag[0].compare ("ErrorConcealmentIdc") == 0) {
sDecParam.eEcActiveIdc = (ERROR_CON_IDC)atol (strTag[1].c_str());
} else if (strTag[0].compare ("CPULoad") == 0) {
sDecParam.uiCpuLoad = (uint32_t)atol (strTag[1].c_str());
} else if (strTag[0].compare ("VideoBitstreamType") == 0) {
@@ -366,17 +401,17 @@ int32_t main (int32_t iArgC, char* pArgV[]) {
} else if (strstr (pArgV[1],
".264")) { // no output dump yuv file, just try to render the decoded pictures //confirmed_safe_unsafe_usage
strInputFile = pArgV[1];
sDecParam.iOutputColorFormat = videoFormatI420;
sDecParam.eOutputColorFormat = videoFormatI420;
sDecParam.uiTargetDqLayer = (uint8_t) - 1;
sDecParam.uiEcActiveFlag = 1;
sDecParam.eEcActiveIdc = ERROR_CON_SLICE_COPY;
sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
}
} else { //iArgC > 2
strInputFile = pArgV[1];
strOutputFile = pArgV[2];
sDecParam.iOutputColorFormat = videoFormatI420;
sDecParam.eOutputColorFormat = videoFormatI420;
sDecParam.uiTargetDqLayer = (uint8_t) - 1;
sDecParam.uiEcActiveFlag = 1;
sDecParam.eEcActiveIdc = ERROR_CON_SLICE_COPY;
sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
if (iArgC > 3) {
for (int i = 3; i < iArgC; i++) {

View File

@@ -6,6 +6,7 @@ H264DEC_CPP_SRCS=\
H264DEC_OBJS += $(H264DEC_CPP_SRCS:.cpp=.$(OBJ))
OBJS += $(H264DEC_OBJS)
$(H264DEC_SRCDIR)/%.$(OBJ): $(H264DEC_SRCDIR)/%.cpp
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264DEC_CFLAGS) $(H264DEC_INCLUDES) -c $(CXX_O) $<

View File

@@ -84,7 +84,7 @@
#include <iostream>
using namespace std;
using namespace WelsSVCEnc;
using namespace WelsEnc;
/*
* Layer Context
@@ -99,6 +99,7 @@ typedef struct tagFilesSet {
string strSeqFile; // for cmd lines
string strLayerCfgFile[MAX_DEPENDENCY_LAYER];
char sRecFileName[MAX_DEPENDENCY_LAYER][MAX_FNAME_LEN];
uint32_t uiFrameToBeCoded;
} SFilesSet;
@@ -108,7 +109,7 @@ static int g_iCtrlC = 0;
static void SigIntHandler (int a) {
g_iCtrlC = 1;
}
static int g_LevelSetting = -1;
static int g_LevelSetting = WELS_LOG_ERROR;
int ParseLayerConfig (CReadConfig& cRdLayerCfg, const int iLayer, SEncParamExt& pSvcParam, SFilesSet& sFileSet) {
if (!cRdLayerCfg.ExistFile()) {
@@ -224,7 +225,7 @@ int ParseConfig (CReadConfig& cRdCfg, SSourcePicture* pSrcPic, SEncParamExt& pSv
} else if (strTag[0].compare ("MaxFrameRate") == 0) {
pSvcParam.fMaxFrameRate = (float)atof (strTag[1].c_str());
} else if (strTag[0].compare ("FramesToBeEncoded") == 0) {
pSvcParam.uiFrameToBeCoded = atoi (strTag[1].c_str());
sFileSet.uiFrameToBeCoded = atoi (strTag[1].c_str());
} else if (strTag[0].compare ("TemporalLayerNum") == 0) {
pSvcParam.iTemporalLayerNum = atoi (strTag[1].c_str());
} else if (strTag[0].compare ("IntraPeriod") == 0) {
@@ -237,6 +238,8 @@ int ParseConfig (CReadConfig& cRdCfg, SSourcePicture* pSrcPic, SEncParamExt& pSv
pSvcParam.bEnableSSEI = atoi (strTag[1].c_str()) ? true : false;
} else if (strTag[0].compare ("EnableFrameCropping") == 0) {
pSvcParam.bEnableFrameCroppingFlag = (atoi (strTag[1].c_str()) != 0);
} else if (strTag[0].compare ("EntropyCodingModeFlag") == 0) {
pSvcParam.iEntropyCodingModeFlag = (atoi (strTag[1].c_str()) != 0);
} else if (strTag[0].compare ("LoopFilterDisableIDC") == 0) {
pSvcParam.iLoopFilterDisableIdc = (int8_t)atoi (strTag[1].c_str());
if (pSvcParam.iLoopFilterDisableIdc > 6 || pSvcParam.iLoopFilterDisableIdc < 0) {
@@ -293,6 +296,8 @@ int ParseConfig (CReadConfig& cRdCfg, SSourcePicture* pSrcPic, SEncParamExt& pSv
pSvcParam.iLTRRefNum = atoi (strTag[1].c_str());
} else if (strTag[0].compare ("LtrMarkPeriod") == 0) {
pSvcParam.iLtrMarkPeriod = (uint32_t)atoi (strTag[1].c_str());
} else if (strTag[0].compare ("LosslessLink") == 0) {
pSvcParam.bIsLosslessLink = atoi (strTag[1].c_str()) ? true : false;
} else if (strTag[0].compare ("NumLayers") == 0) {
pSvcParam.iSpatialLayerNum = (int8_t)atoi (strTag[1].c_str());
if (pSvcParam.iSpatialLayerNum > MAX_DEPENDENCY_LAYER || pSvcParam.iSpatialLayerNum <= 0) {
@@ -347,10 +352,11 @@ void PrintHelp() {
printf (" -sw the source width\n");
printf (" -sh the source height\n");
printf (" -frms Number of total frames to be encoded\n");
printf (" -gop GOPSize - GOP size (1,2,4,8, default: 1)\n");
printf (" -numtl Temporal layer number (default: 1)\n");
printf (" -iper Intra period (default: -1) : must be a power of 2 of GOP size (or -1)\n");
printf (" -nalsize the Maximum NAL size. which should be larger than the each layer slicesize when slice mode equals to SM_DYN_SLICE\n");
printf (" -spsid Enable id adding in SPS/PPS per IDR \n");
printf (" -cabac Entropy coding mode(0:cavlc 1:cabac \n");
printf (" -denois Control denoising (default: 0)\n");
printf (" -scene Control scene change detection (default: 0)\n");
printf (" -bgd Control background detection (default: 0)\n");
@@ -381,7 +387,7 @@ void PrintHelp() {
int ParseCommandLine (int argc, char** argv, SSourcePicture* pSrcPic, SEncParamExt& pSvcParam, SFilesSet& sFileSet) {
char* pCommand = NULL;
SLayerPEncCtx sLayerCtx[3];
SLayerPEncCtx sLayerCtx[MAX_SPATIAL_LAYER_NUM];
int n = 0;
string str_ ("SlicesAssign");
@@ -403,7 +409,7 @@ int ParseCommandLine (int argc, char** argv, SSourcePicture* pSrcPic, SEncParamE
pSrcPic->iPicHeight = atoi (argv[n++]);
else if (!strcmp (pCommand, "-frms") && (n < argc))
pSvcParam.uiFrameToBeCoded = atoi (argv[n++]);
sFileSet.uiFrameToBeCoded = atoi (argv[n++]);
else if (!strcmp (pCommand, "-numtl") && (n < argc))
pSvcParam.iTemporalLayerNum = atoi (argv[n++]);
@@ -417,6 +423,9 @@ int ParseCommandLine (int argc, char** argv, SSourcePicture* pSrcPic, SEncParamE
else if (!strcmp (pCommand, "-spsid") && (n < argc))
pSvcParam.bEnableSpsPpsIdAddition = atoi (argv[n++]) ? true : false;
else if (!strcmp (pCommand, "-cabac") && (n < argc))
pSvcParam.iEntropyCodingModeFlag = atoi (argv[n++]);
else if (!strcmp (pCommand, "-denois") && (n < argc))
pSvcParam.bEnableDenoise = atoi (argv[n++]) ? true : false;
@@ -571,7 +580,7 @@ int FillSpecificParameters (SEncParamExt& sParam) {
sParam.iPicWidth = 1280; // width of picture in samples
sParam.iPicHeight = 720; // height of picture in samples
sParam.iTargetBitrate = 2500000; // target bitrate desired
sParam.iMaxBitrate = MAX_BIT_RATE;
sParam.iMaxBitrate = UNSPECIFIED_BIT_RATE;
sParam.iRCMode = RC_QUALITY_MODE; // rc mode control
sParam.iTemporalLayerNum = 3; // layer number at temporal level
sParam.iSpatialLayerNum = 4; // layer number at spatial level
@@ -581,18 +590,17 @@ int FillSpecificParameters (SEncParamExt& sParam) {
sParam.bEnableFrameSkip = 1; // frame skipping
sParam.bEnableLongTermReference = 0; // long term reference control
sParam.iLtrMarkPeriod = 30;
sParam.iInputCsp = videoFormatI420; // color space of input sequence
sParam.uiIntraPeriod = 320; // period of Intra frame
sParam.bEnableSpsPpsIdAddition = 1;
sParam.bPrefixNalAddingCtrl = 0;
sParam.iComplexityMode = MEDIUM_COMPLEXITY;
int iIndexLayer = 0;
sParam.sSpatialLayers[iIndexLayer].uiProfileIdc = PRO_BASELINE;
sParam.sSpatialLayers[iIndexLayer].iVideoWidth = 160;
sParam.sSpatialLayers[iIndexLayer].iVideoHeight = 90;
sParam.sSpatialLayers[iIndexLayer].fFrameRate = 7.5f;
sParam.sSpatialLayers[iIndexLayer].iSpatialBitrate = 64000;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = MAX_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = UNSPECIFIED_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
++ iIndexLayer;
@@ -601,7 +609,7 @@ int FillSpecificParameters (SEncParamExt& sParam) {
sParam.sSpatialLayers[iIndexLayer].iVideoHeight = 180;
sParam.sSpatialLayers[iIndexLayer].fFrameRate = 15.0f;
sParam.sSpatialLayers[iIndexLayer].iSpatialBitrate = 160000;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = MAX_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = UNSPECIFIED_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
++ iIndexLayer;
@@ -610,7 +618,7 @@ int FillSpecificParameters (SEncParamExt& sParam) {
sParam.sSpatialLayers[iIndexLayer].iVideoHeight = 360;
sParam.sSpatialLayers[iIndexLayer].fFrameRate = 30.0f;
sParam.sSpatialLayers[iIndexLayer].iSpatialBitrate = 512000;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = MAX_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = UNSPECIFIED_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.sSliceArgument.uiSliceNum = 1;
@@ -620,7 +628,7 @@ int FillSpecificParameters (SEncParamExt& sParam) {
sParam.sSpatialLayers[iIndexLayer].iVideoHeight = 720;
sParam.sSpatialLayers[iIndexLayer].fFrameRate = 30.0f;
sParam.sSpatialLayers[iIndexLayer].iSpatialBitrate = 1500000;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = MAX_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].iMaxSpatialBitrate = UNSPECIFIED_BIT_RATE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
sParam.sSpatialLayers[iIndexLayer].sSliceCfg.sSliceArgument.uiSliceNum = 1;
@@ -702,9 +710,7 @@ int ProcessEncoding (ISVCEncoder* pPtrEnc, int argc, char** argv, bool bConfigFi
iRet = 1;
goto INSIDE_MEM_FREE;
}
if (g_LevelSetting >= 0) {
pPtrEnc->SetOption (ENCODER_OPTION_TRACE_LEVEL, &g_LevelSetting);
}
pPtrEnc->SetOption (ENCODER_OPTION_TRACE_LEVEL, &g_LevelSetting);
//finish reading the configurations
iSourceWidth = pSrcPic->iPicWidth;
iSourceHeight = pSrcPic->iPicHeight;
@@ -736,7 +742,7 @@ int ProcessEncoding (ISVCEncoder* pPtrEnc, int argc, char** argv, bool bConfigFi
sSvcParam.iPicWidth = (!sSvcParam.iPicWidth) ? iSourceWidth : sSvcParam.iPicWidth;
sSvcParam.iPicHeight = (!sSvcParam.iPicHeight) ? iSourceHeight : sSvcParam.iPicHeight;
iTotalFrameMax = (int32_t)sSvcParam.uiFrameToBeCoded;
iTotalFrameMax = (int32_t)fs.uiFrameToBeCoded;
if (cmResultSuccess != pPtrEnc->InitializeExt (&sSvcParam)) { // SVC encoder initialization
fprintf (stderr, "SVC encoder Initialize failed\n");
@@ -789,8 +795,8 @@ int ProcessEncoding (ISVCEncoder* pPtrEnc, int argc, char** argv, bool bConfigFi
}
iFrameIdx = 0;
while (iFrameIdx < iTotalFrameMax && (((int32_t)sSvcParam.uiFrameToBeCoded <= 0)
|| (iFrameIdx < (int32_t)sSvcParam.uiFrameToBeCoded))) {
while (iFrameIdx < iTotalFrameMax && (((int32_t)fs.uiFrameToBeCoded <= 0)
|| (iFrameIdx < (int32_t)fs.uiFrameToBeCoded))) {
#ifdef ONLY_ENC_FRAMES_NUM
// Only encoded some limited frames here
@@ -805,10 +811,10 @@ int ProcessEncoding (ISVCEncoder* pPtrEnc, int argc, char** argv, bool bConfigFi
break;
// To encoder this frame
iStart = WelsTime();
pSrcPic->uiTimeStamp = WELS_ROUND (iFrameIdx * (1000 / sSvcParam.fMaxFrameRate));
int iEncFrames = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
iTotal += WelsTime() - iStart;
// fixed issue in case dismatch source picture introduced by frame skipped, 1/12/2010
++ iFrameIdx;
if (videoFrameTypeSkip == sFbi.eFrameType) {
continue;
}
@@ -859,7 +865,6 @@ int ProcessEncoding (ISVCEncoder* pPtrEnc, int argc, char** argv, bool bConfigFi
fprintf (stderr, "EncodeFrame(), ret: %d, frame index: %d.\n", iEncFrames, iFrameIdx);
}
++ iFrameIdx;
}
if (iActualFrameEncodedCount > 0) {
@@ -891,7 +896,7 @@ INSIDE_MEM_FREE:
pFileYUV = NULL;
}
if (pYUV) {
delete pYUV;
delete[] pYUV;
pYUV = NULL;
}
if (pSrcPic) {

View File

@@ -5,6 +5,7 @@ H264ENC_CPP_SRCS=\
H264ENC_OBJS += $(H264ENC_CPP_SRCS:.cpp=.$(OBJ))
OBJS += $(H264ENC_OBJS)
$(H264ENC_SRCDIR)/%.$(OBJ): $(H264ENC_SRCDIR)/%.cpp
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264ENC_CFLAGS) $(H264ENC_INCLUDES) -c $(CXX_O) $<

View File

@@ -156,4 +156,22 @@ WELS_ASM_FUNC_BEGIN IdctResAddPred_neon
vst1.32 {d22[0]},[r2],r1
vst1.32 {d22[1]},[r2]
WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsBlockZero16x16_neon
veor q0, q0
veor q1, q1
lsl r1, r1, 1
.rept 16
vst1.64 {q0, q1}, [r0], r1
.endr
WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsBlockZero8x8_neon
veor q0, q0
lsl r1, r1, 1
.rept 8
vst1.64 {q0}, [r0], r1
.endr
WELS_ASM_FUNC_END
#endif

View File

@@ -158,4 +158,21 @@ WELS_ASM_AARCH64_FUNC_BEGIN IdctResAddPred_AArch64_neon
st1 {v1.s}[0],[x2],x1
st1 {v1.s}[1],[x2]
WELS_ASM_AARCH64_FUNC_END
WELS_ASM_AARCH64_FUNC_BEGIN WelsBlockZero16x16_AArch64_neon
eor v0.16b, v0.16b, v0.16b
eor v1.16b, v1.16b, v1.16b
lsl x1, x1, 1
.rept 16
st1 {v0.16b, v1.16b}, [x0], x1
.endr
WELS_ASM_AARCH64_FUNC_END
WELS_ASM_AARCH64_FUNC_BEGIN WelsBlockZero8x8_AArch64_neon
eor v0.16b, v0.16b, v0.16b
lsl x1, x1, 1
.rept 8
st1 {v0.16b}, [x0], x1
.endr
WELS_ASM_AARCH64_FUNC_END
#endif

View File

@@ -308,7 +308,7 @@ WELS_ASM_AARCH64_FUNC_BEGIN WelsDecoderIChromaPredDcTop_AArch64_neon
.endr
WELS_ASM_AARCH64_FUNC_END
.align 16
.align 4
intra_1_to_4: .short 17*1, 17*2, 17*3, 17*4, 17*1, 17*2, 17*3, 17*4
intra_m3_to_p4: .short -3, -2, -1, 0, 1, 2, 3, 4
@@ -457,7 +457,7 @@ WELS_ASM_AARCH64_FUNC_BEGIN WelsDecoderI16x16LumaPredDcLeft_AArch64_neon
WELS_ASM_AARCH64_FUNC_END
.align 16
.align 4
intra_1_to_8: .short 5, 10, 15, 20, 25, 30, 35, 40
intra_m7_to_p8: .short -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8

View File

@@ -86,7 +86,7 @@ uint8_t* DetectStartCodePrefix (const uint8_t* kpBuf, int32_t* pOffset, int32_t
uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeader, uint8_t* pSrcRbsp,
int32_t iSrcRbspLen, uint8_t* pSrcNal, int32_t iSrcNalLen, int32_t* pConsumedBytes);
int32_t ParseNonVclNal (PWelsDecoderContext pCtx, uint8_t* pRbsp, const int32_t kiSrcLen);
int32_t ParseNonVclNal (PWelsDecoderContext pCtx, uint8_t* pRbsp, const int32_t kiSrcLen, uint8_t* pSrcNal, const int32_t kSrcNalLen);
int32_t ParseRefBasePicMarking (PBitStringAux pBs, PRefBasePicMarking pRefBasePicMarking);
@@ -113,7 +113,7 @@ bool CheckNextAuNewSeq (PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const
* \note Call it in case eNalUnitType is SPS.
*************************************************************************************
*/
int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicWidth, int32_t* pPicHeight);
int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicWidth, int32_t* pPicHeight, uint8_t* pSrcNal, const int32_t kSrcNalLen);
/*!
*************************************************************************************
@@ -129,7 +129,7 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW
* \note Call it in case eNalUnitType is PPS.
*************************************************************************************
*/
int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux);
int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux, uint8_t* pSrcNal, const int32_t kSrcNalLen);
/*!
*************************************************************************************

View File

@@ -35,7 +35,6 @@
#define WELS_BIT_STREAM_H__
#include "typedefs.h"
namespace WelsDec {
/*
@@ -64,9 +63,17 @@ typedef struct TagBitStringAux {
*/
int32_t InitBits (PBitStringAux pBitString, const uint8_t* kpBuf, const int32_t kiSize);
void InitReadBits (PBitStringAux pBitString);
int32_t InitReadBits (PBitStringAux pBitString, intX_t iEndOffset);
//The following for writing bs in decoder for Parse Only purpose
void DecInitBitsForEncoding (PBitStringAux pBitString, uint8_t* kpBuf, const int32_t kiSize);
int32_t DecBsWriteBits (PBitStringAux pBitString, int32_t iLen, const uint32_t kuiValue);
int32_t DecBsWriteOneBit (PBitStringAux pBitString, const uint32_t kuiValue);
int32_t DecBsFlush (PBitStringAux pBitString);
int32_t DecBsWriteUe (PBitStringAux pBitString, const uint32_t kuiValue);
int32_t DecBsWriteSe (PBitStringAux pBitString, const int32_t kiValue);
int32_t DecBsRbspTrailingBits (PBitStringAux pBitString);
void RBSP2EBSP (uint8_t* pDstBuf, uint8_t* pSrcBuf, const int32_t kiSize);
} // namespace WelsDec

View File

@@ -0,0 +1,111 @@
/*!
* \copy
* Copyright (c) 2009-2013, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \file cabac_decoder.h
*
* \brief Interfaces introduced for cabac decoder
*
* \date 10/10/2014 Created
*
*************************************************************************************
*/
#ifndef WELS_CABAC_DECODER_H__
#define WELS_CABAC_DECODER_H__
#include "decoder_context.h"
#include "error_code.h"
#include "wels_common_defs.h"
namespace WelsDec {
static const uint8_t g_kRenormTable256[256] = {
6, 6, 6, 6, 6, 6, 6, 6,
5, 5, 5, 5, 5, 5, 5, 5,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
};
//1. CABAC context initialization
void WelsCabacGlobalInit(PWelsDecoderContext pCabacCtx);
void WelsCabacContextInit (PWelsDecoderContext pCtx, uint8_t eSliceType, int32_t iCabacInitIdc, int32_t iQp);
//2. decoding Engine initialization
int32_t InitCabacDecEngineFromBS (PWelsCabacDecEngine pDecEngine, SBitStringAux* pBsAux);
void RestoreCabacDecEngineToBS (PWelsCabacDecEngine pDecEngine, SBitStringAux* pBsAux);
//3. actual decoding
int32_t Read32BitsCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiValue, int32_t& iNumBitsRead);
int32_t DecodeBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiBit);
int32_t DecodeBypassCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal);
int32_t DecodeTerminateCabac (PWelsCabacDecEngine pDecEngine, uint32_t& uiBinVal);
//4. unary parsing
int32_t DecodeUnaryBinCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, int32_t iCtxOffset,
uint32_t& uiSymVal);
//5. EXGk parsing
int32_t DecodeExpBypassCabac (PWelsCabacDecEngine pDecEngine, int32_t iCount, uint32_t& uiSymVal);
uint32_t DecodeUEGLevelCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t& uiBinVal);
int32_t DecodeUEGMvCabac (PWelsCabacDecEngine pDecEngine, PWelsCabacCtx pBinCtx, uint32_t iMaxC, uint32_t& uiCode);
#define WELS_CABAC_HALF 0x01FE
#define WELS_CABAC_QUARTER 0x0100
#define WELS_CABAC_FALSE_RETURN(iErrorInfo) \
if(iErrorInfo) { \
return iErrorInfo; \
}
}
#endif

Some files were not shown because too many files have changed in this diff Show More