YUV涓昏鐨勯噰鏍鋒牸寮?/span>
涓昏鐨勯噰鏍鋒牸寮忔湁YCbCr 4:2:0銆?/span>YCbCr 4:2:2銆?/span>YCbCr 4:1:1鍜?/span> YCbCr 4:4:4銆傚叾涓?/span>YCbCr 4:1:1 姣旇緝甯哥敤錛屽叾鍚箟涓猴細姣忎釜鐐逛繚瀛樹竴涓?/span> 8bit 鐨勪寒搴﹀?/span>(涔熷氨鏄?/span>Y鍊?/span>), 姣?/span> 2x2 涓偣淇濆瓨涓涓?/span> Cr 鍜?/span>Cb 鍊?/span>, 鍥懼儚鍦ㄨ倝鐪間腑鐨勬劅瑙変笉浼氳搗澶ぇ鐨勫彉鍖栥傛墍浠?/span>, 鍘熸潵鐢?/span> RGB(R,G,B 閮芥槸 8bit unsigned) 妯″瀷, 4 涓偣闇瑕?/span> 8x3=24 bites錛堝涓嬪浘絎竴涓浘錛?/span>. 鑰岀幇鍦ㄤ粎闇瑕?/span> 8+(8/4)+(8/4)=12bites, 騫沖潎姣忎釜鐐瑰崰12bites(濡備笅鍥劇浜屼釜鍥?/span>)銆傝繖鏍峰氨鎶婂浘鍍忕殑鏁版嵁鍘嬬緝浜嗕竴鍗娿?/span>
涓婅竟浠呯粰鍑轟簡鐞嗚涓婄殑紺轟緥錛屽湪瀹為檯鏁版嵁瀛樺偍涓槸鏈夊彲鑳芥槸涓嶅悓鐨勶紝涓嬮潰緇欏嚭鍑犵鍏蜂綋鐨勫瓨鍌ㄥ艦寮忥細
錛?/span>1錛?/span> YUV 4:4:4
YUV涓変釜淇¢亾鐨勬娊鏍風巼鐩稿悓錛屽洜姝ゅ湪鐢熸垚鐨勫浘鍍忛噷錛屾瘡涓薄绱犵殑涓変釜鍒嗛噺淇℃伅瀹屾暣錛堟瘡涓垎閲忛氬父8姣旂壒錛夛紝緇忚繃8姣旂壒閲忓寲涔嬪悗錛屾湭緇忓帇緙╃殑姣忎釜鍍忕礌鍗犵敤3涓瓧鑺傘?/span>
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
錛?span>2錛?span> YUV 4:2:2
姣忎釜鑹插樊淇¢亾鐨勬娊鏍風巼鏄寒搴︿俊閬撶殑涓鍗婏紝鎵浠ユ按騫蟲柟鍚戠殑鑹插害鎶芥牱鐜囧彧鏄?span>4:4:4鐨勪竴鍗娿傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勫浘鍍忔潵璇達紝姣忎釜鐢變袱涓按騫蟲柟鍚戠浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>4瀛楄妭鍐呭瓨銆?/span>
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 Y1 V1 Y2 U2 Y3 V3
鏄犲皠鍑哄儚绱犵偣涓猴細[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
錛?span>3錛?span> YUV 4:1:1
4:1:1鐨勮壊搴︽娊鏍鳳紝鏄湪姘村鉤鏂瑰悜涓婂鑹插害榪涜4:1鎶芥牱銆傚浜庝綆绔敤鎴峰拰娑堣垂綾諱駭鍝佽繖浠嶇劧鏄彲浠ユ帴鍙楃殑銆傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勮棰戞潵璇達紝姣忎釜鐢?span>4涓按騫蟲柟鍚戠浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>6瀛楄妭鍐呭瓨
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 Y1 Y2 V2 Y3
鏄犲皠鍑哄儚绱犵偣涓猴細[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
錛?span>4錛?span>YUV4:2:0
4:2:0騫朵笉鎰忓懗鐫鍙湁Y,Cb鑰屾病鏈?span>Cr鍒嗛噺銆傚畠鎸囧緱鏄姣忚鎵弿綰挎潵璇達紝鍙湁涓縐嶈壊搴﹀垎閲忎互2:1鐨勬娊鏍風巼瀛樺偍銆傝繘琛岄殧琛屾壂鎻忥紝鐩擱偦鐨勬壂鎻忚瀛樺偍涓嶅悓鐨勮壊搴﹀垎閲忥紝涔熷氨鏄錛屽鏋滀竴琛屾槸4:2:0鐨勮瘽錛屼笅涓琛屽氨鏄?span>4:0:2錛屽啀涓嬩竴琛屾槸4:2:0...浠ユ綾繪帹銆傚姣忎釜鑹插害鍒嗛噺鏉ヨ錛屾按騫蟲柟鍚戝拰绔栫洿鏂瑰悜鐨勬娊鏍風巼閮芥槸2:1錛屾墍浠ュ彲浠ヨ鑹插害鐨勬娊鏍風巼鏄?span>4:1銆傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勮棰戞潵璇達紝姣忎釜鐢?span>2x2涓?span>2琛?span>2鍒楃浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>6瀛楄妭鍐呭瓨銆?/span>
涓嬮潰鍏釜鍍忕礌涓猴細[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
瀛樻斁鐨勭爜嫻佷負錛?span>Y0 U0 Y1 Y2 U2 Y3
Y5 V5 Y6 Y7 V7 Y8
鏄犲皠鍑虹殑鍍忕礌鐐逛負錛?span>[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]瀵瑰簲AVPicture閲岄潰鏈塪ata[4]鍜宭inesize[4]鍏朵腑data鏄竴涓寚鍚戞寚閽堢殑鎸囬拡錛堜簩綰с佷簩緇存寚閽堬級錛屼篃灝辨槸鎸囧悜瑙嗛鏁版嵁緙撳啿鍖虹殑棣栧湴鍧錛岃宒ata[0]~data[3]鏄竴綰ф寚閽堬紝鍙互鐢ㄥ涓嬬殑鍥炬潵琛ㄧず錛?
data -->xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
^ ^ ^
| | |
data[0] data[1] data[2]
姣斿璇達紝褰損ix_fmt=PIX_FMT_YUV420P鏃訛紝data涓殑鏁版嵁鏄寜鐓UV鐨勬牸寮忓瓨鍌ㄧ殑錛屼篃灝辨槸錛?
data -->YYYYYYYYYYYYYYUUUUUUUUUUUUUVVVVVVVVVVVV ^ ^ ^ | | | data[0] data[1] data[2]
linesize鏄寚瀵瑰簲浜庢瘡涓琛岀殑澶у皬錛屼負浠涔堥渶瑕佽繖涓彉閲忥紝鏄洜涓哄湪YUV鏍煎紡鍜孯GB鏍煎紡鏃訛紝姣忚鐨勫ぇ灝忎笉涓瀹氱瓑浜庡浘鍍忕殑瀹藉害錛屽浜嶳GB鏍煎紡杈撳嚭鏃?鍙湁涓涓氶亾(bgrbgrbgr......)鍙敤錛屽嵆linesize[0],鍜宒ata[0],so RGB24 : data[0] = packet rgb//bgrbgrbgr......
linesize[0] = width*3
鍏朵粬鐨勫data[1][2][3]涓巐inesize[1][2][3]鏃犱換浣曟剰涔?
鑰屽浜庯脊錛碉級鏍煎紡杈撳嚭鏃訛紝鏈変笁涓氶亾鍙敤錛屽嵆data[0][1][2],涓巐inesize[0][1][2]錛岃寉uv鏍煎紡瀵逛簬榪愬姩浼拌鏃訛紝闇瑕佸~鍏卲adding(right, bottom),鏁咃細
linesize=width+padding size(16+16). ///////////////////////////////////////////////////////////////////////////////////////
case PIX_FMT_YUV420P:
case PIX_FMT_YUVJ420P:
case PIX_FMT_RGB555:
if (PIC_DIRECTION_0 == m_dwFilpPicDirection)
{
m_pYuvFrame->data [0] += m_pYuvFrame->linesize[0] * m_pVCodecContext->height;
//鍥犱負鏄殧琛屾壂鎻廢涓嶸鍙湁楂樺害鐨勪竴鍗?br> m_pYuvFrame->data [1] += m_pYuvFrame->linesize[1] * m_pVCodecContext->height/2;
m_pYuvFrame->data [2] += m_pYuvFrame->linesize[2] * m_pVCodecContext->height/2;
m_pYuvFrame->linesize[0] = -m_pYuvFrame->linesize[0];
m_pYuvFrame->linesize[1] = -m_pYuvFrame->linesize[1];
m_pYuvFrame->linesize[2] = -m_pYuvFrame->linesize[2];
}
break;
case PIX_FMT_YUVJ422P:
case PIX_FMT_YUV422P:
case PIX_FMT_YUYVJ422:
case PIX_FMT_YUV411P:
case PIX_FMT_YUYV422:
if (PIC_DIRECTION_0 == m_dwFilpPicDirection)
{
m_pYuvFrame->data [0] += m_pYuvFrame->linesize[0] * m_pVCodecContext->height;
m_pYuvFrame->data [1] += m_pYuvFrame->linesize[1] * m_pVCodecContext->height;
m_pYuvFrame->data [2] += m_pYuvFrame->linesize[2] * m_pVCodecContext->height;
m_pYuvFrame->linesize[0] = -m_pYuvFrame->linesize[0];
m_pYuvFrame->linesize[1] = -m_pYuvFrame->linesize[1];
m_pYuvFrame->linesize[2] = -m_pYuvFrame->linesize[2];
}
break;
}
鍦‵FMPEG涓漿鎹GB鏃墮『渚塊鍊掑浘鍍忕殑鏂瑰悜綆楁硶