From: Anton Khirnov <an...@khirnov.net> The function currently accepts a PutBitContext and a GetBitContext, which hardcodes their sizes into the lavc ABI. Since the function is quite small and only called in a few places, the simplest solution is making it inline, thus avoiding a runtime dependency completely. --- libavcodec/mpeg4audio.c | 40 ---------------------------------------- libavcodec/mpeg4audio.h | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 41 deletions(-)
diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c index af8e6552ff..e321bcca83 100644 --- a/libavcodec/mpeg4audio.c +++ b/libavcodec/mpeg4audio.c @@ -145,43 +145,3 @@ int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, return specific_config_bitindex; } - -static av_always_inline unsigned int copy_bits(PutBitContext *pb, - GetBitContext *gb, - int bits) -{ - unsigned int el = get_bits(gb, bits); - put_bits(pb, bits, el); - return el; -} - -int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb) -{ - int five_bit_ch, four_bit_ch, comment_size, bits; - int offset = put_bits_count(pb); - - copy_bits(pb, gb, 10); //Tag, Object Type, Frequency - five_bit_ch = copy_bits(pb, gb, 4); //Front - five_bit_ch += copy_bits(pb, gb, 4); //Side - five_bit_ch += copy_bits(pb, gb, 4); //Back - four_bit_ch = copy_bits(pb, gb, 2); //LFE - four_bit_ch += copy_bits(pb, gb, 3); //Data - five_bit_ch += copy_bits(pb, gb, 4); //Coupling - if (copy_bits(pb, gb, 1)) //Mono Mixdown - copy_bits(pb, gb, 4); - if (copy_bits(pb, gb, 1)) //Stereo Mixdown - copy_bits(pb, gb, 4); - if (copy_bits(pb, gb, 1)) //Matrix Mixdown - copy_bits(pb, gb, 3); - for (bits = five_bit_ch*5+four_bit_ch*4; bits > 16; bits -= 16) - copy_bits(pb, gb, 16); - if (bits) - copy_bits(pb, gb, bits); - avpriv_align_put_bits(pb); - align_get_bits(gb); - comment_size = copy_bits(pb, gb, 8); - for (; comment_size > 0; comment_size--) - copy_bits(pb, gb, 8); - - return put_bits_count(pb) - offset; -} diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h index 2eef2205bd..d2ce232485 100644 --- a/libavcodec/mpeg4audio.h +++ b/libavcodec/mpeg4audio.h @@ -104,7 +104,45 @@ enum AudioObjectType { #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE ///<marker and the comment + // +static av_always_inline unsigned int avpriv_pce_copy_bits(PutBitContext *pb, + GetBitContext *gb, + int bits) +{ + unsigned int el = get_bits(gb, bits); + put_bits(pb, bits, el); + return el; +} -int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb); +static av_always_inline int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb) +{ + int five_bit_ch, four_bit_ch, comment_size, bits; + int offset = put_bits_count(pb); + + avpriv_pce_copy_bits(pb, gb, 10); //Tag, Object Type, Frequency + five_bit_ch = avpriv_pce_copy_bits(pb, gb, 4); //Front + five_bit_ch += avpriv_pce_copy_bits(pb, gb, 4); //Side + five_bit_ch += avpriv_pce_copy_bits(pb, gb, 4); //Back + four_bit_ch = avpriv_pce_copy_bits(pb, gb, 2); //LFE + four_bit_ch += avpriv_pce_copy_bits(pb, gb, 3); //Data + five_bit_ch += avpriv_pce_copy_bits(pb, gb, 4); //Coupling + if (avpriv_pce_copy_bits(pb, gb, 1)) //Mono Mixdown + avpriv_pce_copy_bits(pb, gb, 4); + if (avpriv_pce_copy_bits(pb, gb, 1)) //Stereo Mixdown + avpriv_pce_copy_bits(pb, gb, 4); + if (avpriv_pce_copy_bits(pb, gb, 1)) //Matrix Mixdown + avpriv_pce_copy_bits(pb, gb, 3); + for (bits = five_bit_ch*5+four_bit_ch*4; bits > 16; bits -= 16) + avpriv_pce_copy_bits(pb, gb, 16); + if (bits) + avpriv_pce_copy_bits(pb, gb, bits); + avpriv_align_put_bits(pb); + align_get_bits(gb); + comment_size = avpriv_pce_copy_bits(pb, gb, 8); + for (; comment_size > 0; comment_size--) + avpriv_pce_copy_bits(pb, gb, 8); + + return put_bits_count(pb) - offset; +} #endif /* AVCODEC_MPEG4AUDIO_H */ -- 2.12.0 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel