日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【FFmpeg编程进阶】(13)FLV 解码器初始化函数 ff_h263_decode_init() 代码分析 --- 待更新

發(fā)布時間:2023/12/16 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【FFmpeg编程进阶】(13)FLV 解码器初始化函数 ff_h263_decode_init() 代码分析 --- 待更新 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【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()

  • 初始化 MpegEncContext 解碼器上下文結(jié)構(gòu)體,將解碼器Codec 上下文AVCodecContext 與 MpegEncContext 綁定在一起
  • 綁定宏塊解碼函數(shù) ff_h263_decode_mb()
  • s->h263_flv = 1
  • PS: 在編解碼核心函數(shù)里,看了一個多小時代碼,發(fā)現(xiàn)其邏輯就目前我的理解來說有點看不懂(慢慢花時間看或許多少也會有收獲)
    考慮效率及目前的需求,對于目前我這樣的新手來說,這些更加高深的編解碼知識會有點形而上,
    與其花大量時間結(jié)合封裝格式深專研進去學(xué)習(xí),還不如先放手學(xué)習(xí)其他的基礎(chǔ),
    比如先掌握ffmpeg 怎么使用、怎么編程,這些或許在當前階段更加重要,
    對于目前來說,我只需要知道調(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。