Mercurial > libavcodec.hg
comparison imgconvert.c @ 12386:b4b2f1006d9d libavcodec
Implement av_get_image_linesize() and use it in
ff_get_plane_bytewidth().
The new implementation is more generic, more compact and more correct.
author | stefano |
---|---|
date | Thu, 12 Aug 2010 15:05:58 +0000 |
parents | e1ef713061ce |
children | e7de1ba6dbc0 |
comparison
equal
deleted
inserted
replaced
12385:d0b25641338b | 12386:b4b2f1006d9d |
---|---|
794 } | 794 } |
795 } | 795 } |
796 | 796 |
797 int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane) | 797 int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane) |
798 { | 798 { |
799 int bits; | 799 return av_get_image_linesize(pix_fmt, width, plane); |
800 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; | |
801 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; | |
802 | |
803 pf = &pix_fmt_info[pix_fmt]; | |
804 switch(pf->pixel_type) { | |
805 case FF_PIXEL_PACKED: | |
806 switch(pix_fmt) { | |
807 case PIX_FMT_YUYV422: | |
808 case PIX_FMT_UYVY422: | |
809 case PIX_FMT_RGB565BE: | |
810 case PIX_FMT_RGB565LE: | |
811 case PIX_FMT_RGB555BE: | |
812 case PIX_FMT_RGB555LE: | |
813 case PIX_FMT_RGB444BE: | |
814 case PIX_FMT_RGB444LE: | |
815 case PIX_FMT_BGR565BE: | |
816 case PIX_FMT_BGR565LE: | |
817 case PIX_FMT_BGR555BE: | |
818 case PIX_FMT_BGR555LE: | |
819 case PIX_FMT_BGR444BE: | |
820 case PIX_FMT_BGR444LE: | |
821 bits = 16; | |
822 break; | |
823 case PIX_FMT_UYYVYY411: | |
824 bits = 12; | |
825 break; | |
826 default: | |
827 bits = pf->depth * pf->nb_channels; | |
828 break; | |
829 } | |
830 return (width * bits + 7) >> 3; | |
831 break; | |
832 case FF_PIXEL_PLANAR: | |
833 if ((pix_fmt != PIX_FMT_NV12 && pix_fmt != PIX_FMT_NV21) && | |
834 (plane == 1 || plane == 2)) | |
835 width= -((-width)>>desc->log2_chroma_w); | |
836 | |
837 return (width * pf->depth + 7) >> 3; | |
838 break; | |
839 case FF_PIXEL_PALETTE: | |
840 if (plane == 0) | |
841 return width; | |
842 break; | |
843 } | |
844 | |
845 return -1; | |
846 } | 800 } |
847 | 801 |
848 void av_picture_data_copy(uint8_t *dst_data[4], int dst_linesize[4], | 802 void av_picture_data_copy(uint8_t *dst_data[4], int dst_linesize[4], |
849 uint8_t *src_data[4], int src_linesize[4], | 803 uint8_t *src_data[4], int src_linesize[4], |
850 enum PixelFormat pix_fmt, int width, int height) | 804 enum PixelFormat pix_fmt, int width, int height) |