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. Signed-off-by: Diego Biurrun <diego@biurrun.de>tags/n4.0
| @@ -91,7 +91,7 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, AVPacket *out) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| init_put_bits(&pb, pce_data, MAX_PCE_SIZE); | init_put_bits(&pb, pce_data, MAX_PCE_SIZE); | ||||
| pce_size = avpriv_copy_pce_data(&pb, &gb)/8; | |||||
| pce_size = ff_copy_pce_data(&pb, &gb) / 8; | |||||
| flush_put_bits(&pb); | flush_put_bits(&pb); | ||||
| in->size -= get_bits_count(&gb)/8; | in->size -= get_bits_count(&gb)/8; | ||||
| in->data += get_bits_count(&gb)/8; | in->data += get_bits_count(&gb)/8; | ||||
| @@ -145,43 +145,3 @@ int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, | |||||
| return specific_config_bitindex; | 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; | |||||
| } | |||||
| @@ -23,6 +23,9 @@ | |||||
| #define AVCODEC_MPEG4AUDIO_H | #define AVCODEC_MPEG4AUDIO_H | ||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include "libavutil/attributes.h" | |||||
| #include "get_bits.h" | #include "get_bits.h" | ||||
| #include "put_bits.h" | #include "put_bits.h" | ||||
| @@ -105,6 +108,44 @@ enum AudioObjectType { | |||||
| #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE | #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE | ||||
| ///<marker and the comment | ///<marker and the comment | ||||
| int avpriv_copy_pce_data(PutBitContext *pb, GetBitContext *gb); | |||||
| static av_always_inline unsigned int ff_pce_copy_bits(PutBitContext *pb, | |||||
| GetBitContext *gb, | |||||
| int bits) | |||||
| { | |||||
| unsigned int el = get_bits(gb, bits); | |||||
| put_bits(pb, bits, el); | |||||
| return el; | |||||
| } | |||||
| static inline int ff_copy_pce_data(PutBitContext *pb, GetBitContext *gb) | |||||
| { | |||||
| int five_bit_ch, four_bit_ch, comment_size, bits; | |||||
| int offset = put_bits_count(pb); | |||||
| ff_pce_copy_bits(pb, gb, 10); // Tag, Object Type, Frequency | |||||
| five_bit_ch = ff_pce_copy_bits(pb, gb, 4); // Front | |||||
| five_bit_ch += ff_pce_copy_bits(pb, gb, 4); // Side | |||||
| five_bit_ch += ff_pce_copy_bits(pb, gb, 4); // Back | |||||
| four_bit_ch = ff_pce_copy_bits(pb, gb, 2); // LFE | |||||
| four_bit_ch += ff_pce_copy_bits(pb, gb, 3); // Data | |||||
| five_bit_ch += ff_pce_copy_bits(pb, gb, 4); // Coupling | |||||
| if (ff_pce_copy_bits(pb, gb, 1)) // Mono Mixdown | |||||
| ff_pce_copy_bits(pb, gb, 4); | |||||
| if (ff_pce_copy_bits(pb, gb, 1)) // Stereo Mixdown | |||||
| ff_pce_copy_bits(pb, gb, 4); | |||||
| if (ff_pce_copy_bits(pb, gb, 1)) // Matrix Mixdown | |||||
| ff_pce_copy_bits(pb, gb, 3); | |||||
| for (bits = five_bit_ch*5+four_bit_ch*4; bits > 16; bits -= 16) | |||||
| ff_pce_copy_bits(pb, gb, 16); | |||||
| if (bits) | |||||
| ff_pce_copy_bits(pb, gb, bits); | |||||
| avpriv_align_put_bits(pb); | |||||
| align_get_bits(gb); | |||||
| comment_size = ff_pce_copy_bits(pb, gb, 8); | |||||
| for (; comment_size > 0; comment_size--) | |||||
| ff_pce_copy_bits(pb, gb, 8); | |||||
| return put_bits_count(pb) - offset; | |||||
| } | |||||
| #endif /* AVCODEC_MPEG4AUDIO_H */ | #endif /* AVCODEC_MPEG4AUDIO_H */ | ||||
| @@ -79,7 +79,7 @@ static int adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t | |||||
| init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE); | init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE); | ||||
| put_bits(&pb, 3, 5); //ID_PCE | put_bits(&pb, 3, 5); //ID_PCE | ||||
| adts->pce_size = (avpriv_copy_pce_data(&pb, &gb) + 3) / 8; | |||||
| adts->pce_size = (ff_copy_pce_data(&pb, &gb) + 3) / 8; | |||||
| flush_put_bits(&pb); | flush_put_bits(&pb); | ||||
| } | } | ||||
| @@ -111,7 +111,7 @@ static int latm_write_frame_header(AVFormatContext *s, PutBitContext *bs) | |||||
| avpriv_copy_bits(bs, par->extradata, ctx->off + 3); | avpriv_copy_bits(bs, par->extradata, ctx->off + 3); | ||||
| if (!ctx->channel_conf) { | if (!ctx->channel_conf) { | ||||
| avpriv_copy_pce_data(bs, &gb); | |||||
| ff_copy_pce_data(bs, &gb); | |||||
| } | } | ||||
| } | } | ||||