2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Cum usura avcodec_find_encoder_by_name ad inveniendum encoder;
const AVCodec * aacencoder = avcodec_find_encoder_by_name("libx264");
Valores encoder sunt:
id AV_CODEC_ID_H264 (27)
long_name libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
nomen libx264
pix_fmts AV_PIX_FMT_YUV420P (0)
typus AVMEDIA_TYPE_VIDEO (0)
2. Post vocatum AVCodecContext *aacencodercontext = avcodec_alloc_context3(aacencoder);
Encoder idem est quod supra, nullas mutationes
Contentum in contextu encoder est:
Codec_id et codec_type in contextu encoder valores habent, et alii eorum defectui repositi sunt.
codec_id AV_CODEC_ID_H264 (27)
codec_type AVMEDIA_TYPE_VIDEO (0)
Valores default tales sunt:
s->time_base = (AVRational){0,1};
s->framerate = (AVRational){ 0, 1 };
s->pkt_timebase = (AVRational){ 0, 1 };
3. Cum methodus avcodec_open2(encoderAVCodecContext, encoderAVCodec, NULL) appellatur, plures parametri statuentur.
Possumus fingere encoder sumendo esse AAC, qui parametri ponentur?
Prima est quot specimen tabulae avframe habet.
3.1 Committitur cum avcodec_find_encoder vel avcodec_find_decoder in initio.
Modus est in tabella D: Ctoolyinshipinffmpeg-6.0sourcelibavcodecallcodecs.c.
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
{
return find_codec(id, av_codec_is_encoder);
}
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
{
return find_codec(id, av_codec_is_decoder);
}
3.2 Media methodi methodi inveniendi av_codec_iterate est methodus
static const AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec*))
{
const AVCodec *p, *experimental = NULL;
void *i=0;
id = remap_deprecated_codec_id(id);
dum ((p = av_codec_iterate(&i))){
si (! x(p))
pergere;
sin (p-> id == id) {
si facultatum & AV_CODEC_CAP_EXPERIMENTAL && !experimental) {
experimentum = p;
} aliud
remittere p;
}
}
experimentum reddidit;
}
3.3 Methodus av_codec_iterata reapse respondentem codicem e codice c_list invenit.
const AVCodec *av_codec_iterate(inanis **opacum)
{
uintptr_t i = (uintptr_t)*opaque;
const FFCodec *c = codec_list[i];
ff_thread_once(&av_codec_static_init, av_codec_init_static);
si (c) {
*opaque = (void*)(i + 1);
return &c->p;
}
NULL redire;
}
Videre possumus plures esse aacs cum codicec_list respondentes, et ff_aac_encoder ad illustrandum utimur.
Codicem quaesito inveni definitionem ff_aac_encoder esse in aacenc.c, quod continet.
Sequentia indicia videri possunt ex D: Ctoolyinshipinffmpeg-6.0sourcelibavcodecaacenc.c.
Field.init = aac_encode_init, munus esse debet;
Ut videre potes ex functione aac_encode_init, frame_size est 1024
avctx->frame_size = 1024;
const FFCodec ff_aac_encoder = {
.p.name = "aac",
CODEX_LONG_NAME ("AAC (Provectus Audio Coding)"),
.p.type = AVMEDIA_TYPE_AUDIO,
.p.id = AV_CODEC_ID_AAC,
.p.capaces = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_SMALL_LAST_FRAME,
.priv_data_size = sizeof(AACEncContext);
.init = aac_encode_init,
FF_CODEC_ENCODE_CB(aac_encode_frame);
.close = aac_encode_end,
.defaults = aac_encode_defaults,
.p.supported_samplerates = ff_mpeg4audio_sample_rates,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.p.priv_class = & aacenc_class,
};
Hic, adhuc quaestio est: quando initialized ff_aac_encoder?
Revera, ret = avcodec_open2(avcodecContext,nullptr, nullptr);
Core in codice est
if (codec2->init) {
Nam, vocabitur;
static av_cold int aac_encode_init(AVCodecContext *avctx)