ffmpeg.exe 笔记

open_input_file:

avformat_open_input 打开了输入文件

av_dict_get 获取信息

setup_find_stream_info_opts

avformat_find_stream_info

codec = avcodec_find_decoder


open_output_file

avformat_alloc_output_context2(&oc, NULL, o->format, filename)

new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO, source_index)

avcodec_get_context_defaults3(st->codec, ost->enc);

init_input_stream:

有个if (ist->decoding_needed)判断,需要解码就 avcodec_open2;但是咱这里不需要,它只简单的初始化了以下几个:

ist->next_pts = AV_NOPTS_VALUE;

    ist->next_dts = AV_NOPTS_VALUE;

    ist->is_start = 1;

关于output_stream的初始化:

    /* open each encoder */

    for (i = 0; i < nb_output_streams; i++) {

        ost = output_streams[i];

        if (ost->encoding_needed) {

  ....  咱这里并不需要编码。

  } else {

     av_opt_set_dict(ost->st->codec, &ost->opts);

  }

 

在output_packet函数里判断是否需要编码:

if (ist->decoding_needed) { 如果需要编码:decode_audio    (ist, &avpkt, &got_output); decode_video    (ist, &avpkt, &got_output);

否则do_streamcopy(最终调用av_interleaved_write_frame)



在transcode_init 函数里从 input_xxx 拷贝到 ouput_xxx里的信息:

ost->st->disposition

codec->bits_per_raw_sample

codec->chroma_sample_location

codec->codec_id

codec->codec_type

有一个if判断的拷贝;

codec->bit_rate

codec->rc_max_rate

codec->rc_buffer_size

codec->field_order

codec->extradata ;这里分配内存

codec->extradata_size

codec->bits_per_coded_sample

codec->time_base

有个switch分支内拷贝:


 


你可能感兴趣的:(ffmpeg.exe 笔记)