[英]Android Encode h264 using libavcodec for ARGB
我有一個緩沖區內容流,其中實際上包含480x800大小的ARGB圖像[大小為480 * 800 * 4的字節數組]。 我想以指定的fps(12)將大約10,000幅相似的圖像編碼為h.264流。 這顯示了如何將圖像編碼為編碼的視頻,但是要求輸入的是yuv420。
現在我有ARGB圖像,我想編碼為CODEC_ID_H264 如何將YUV420p的RGB轉換為ffmpeg編碼器? 顯示了如何針對rgb24進行操作,但針對rgb32進行操作(表示ARGB圖像數據)
我該如何使用libavcodec?
編輯:我發現如何從ffmpeg編碼器的YUV420p轉換RGB? 但是我不明白。
從第一個鏈接,我知道AVFrame結構包含由Y,U和V值填充的data [0],data 1 ,data [2]。
在第二個鏈接中,他們展示了如何使用sws_scale這樣將RGB24轉換為YUV420。
SwsContext * ctx = sws_getContext(imgWidth, imgHeight,
AV_PIX_FMT_RGB24, imgWidth, imgHeight,
AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
uint8_t * inData[1] = { rgb24Data }; // RGB24 have one plane
int inLinesize[1] = { 3*imgWidth }; // RGB stride
sws_scale(ctx, inData, inLinesize, 0, imgHeight, dst_picture.data, dst_picture.linesize)
在這里,我假設rgb24Data是包含RGB24圖像字節的緩沖區。
那么,我如何將這些信息用於32位的ARGB? 我是否需要手動剝離Alpha通道或其他解決方法?
謝謝
只需將像素格式和行距從RGB24切換到ARGB
SwsContext * ctx = sws_getContext(imgWidth, imgHeight,
AV_PIX_FMT_ARGB, imgWidth, imgHeight,
AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
uint8_t * inData[1] = { rgb24Data }; // RGB24 have one plane
int inLinesize[1] = { 4*imgWidth }; // RGB stride
sws_scale(ctx, inData, inLinesize, 0, imgHeight, dst_picture.data, dst_picture.linesize)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.