【FFmpeg编程进阶】(13)FLV 解码器初始化函数 ff_h263_decode_init() 代码分析 --- 待更新
【FFmpeg編程進階】(13)ff_flv_decoder 初始化函數(shù) ff_h263_decode_init 代碼分析 --- 待更新
- 一、FLV解碼 ff_h263_decode_init()
- 1.1 宏塊解碼 ff_h263_decode_mb()
在前面分析《【FFmpeg編程進階】(11)avcodec_open2() 函數(shù)代碼分析 - 打開Codec解碼器》時,
我們涉及到了解碼Codec init 初始化,由于代碼比較長,我們再分一章來分析。
主要目的,還是以 FLV 解碼器為例 ,來看下解碼器主要做了啥,不用太精細,了解大概做了啥事就好了,
至于更精細的,我們后面對 FFmpeg 有更深入了解時,再看。
先記錄下TODO LIST,后面再更新。
# libavcodec\flvdec.c AVCodec ff_flv_decoder = {.name = "flv",.long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"),.type = AVMEDIA_TYPE_VIDEO,.id = AV_CODEC_ID_FLV1,.priv_data_size = sizeof(MpegEncContext),.init = ff_h263_decode_init,.close = ff_h263_decode_end,.decode = ff_h263_decode_frame,.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1,.caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,.max_lowres = 3,.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,AV_PIX_FMT_NONE }, };一、FLV解碼 ff_h263_decode_init()
PS: 在編解碼核心函數(shù)里,看了一個多小時代碼,發(fā)現(xiàn)其邏輯就目前我的理解來說有點看不懂(慢慢花時間看或許多少也會有收獲)
考慮效率及目前的需求,對于目前我這樣的新手來說,這些更加高深的編解碼知識會有點形而上,
與其花大量時間結(jié)合封裝格式深專研進去學(xué)習(xí),還不如先放手學(xué)習(xí)其他的基礎(chǔ),
比如先掌握ffmpeg 怎么使用、怎么編程,這些或許在當(dāng)前階段更加重要,
對于目前來說,我只需要知道調(diào)用這個接口,就會對packet 進行編解碼,
至于編解碼其詳細的原理,等隨著音視頻學(xué)習(xí)更深時,基礎(chǔ)更好時,再返回來學(xué)習(xí),這樣可能會更好理解,同時與高效些。
因此,本文加上 待更新 字樣先留個念想,后面學(xué)習(xí)深入再補上。
# libavcodec\h263dec.c av_cold int ff_h263_decode_init(AVCodecContext *avctx) {MpegEncContext *s = avctx->priv_data;s->out_format = FMT_H263;// 1. 初始化 MpegEncContext 解碼器上下文結(jié)構(gòu)體,將解碼器Codec 上下文AVCodecContext 與 MpegEncContext 綁定在一起// set defaultsff_mpv_decode_defaults(s);ff_mpv_decode_init(s, avctx);// 2. 綁定宏塊解碼函數(shù) ff_h263_decode_mb()s->quant_precision = 5;s->decode_mb = ff_h263_decode_mb;s->low_delay = 1;s->unrestricted_mv = 1;// 3. s->h263_flv = 1;/* select sub codec */switch (avctx->codec->id) {case AV_CODEC_ID_MSMPEG4V2:s->h263_pred = 1;s->msmpeg4_version = 2;break;case AV_CODEC_ID_FLV1:s->h263_flv = 1;break;}s->codec_id = avctx->codec->id;// 4. 解碼器相關(guān)信息初始化/* for H.263, we allocate the images after having read the header */if (avctx->codec->id != AV_CODEC_ID_H263 &&avctx->codec->id != AV_CODEC_ID_H263P &&avctx->codec->id != AV_CODEC_ID_MPEG4) {avctx->pix_fmt = h263_get_format(avctx);ff_mpv_idct_init(s);if ((ret = ff_mpv_common_init(s)) < 0)return ret;}ff_h263dsp_init(&s->h263dsp);ff_qpeldsp_init(&s->qdsp);ff_h263_decode_init_vlc();return 0; }
1.1 宏塊解碼 ff_h263_decode_mb()
總結(jié)
以上是生活随笔為你收集整理的【FFmpeg编程进阶】(13)FLV 解码器初始化函数 ff_h263_decode_init() 代码分析 --- 待更新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言计算排列组合C(m,n)的值
- 下一篇: 抽奖随机滚动_老板让我做年会抽奖系统,我