summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/mp_image.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-05 17:02:04 +0100
committerwm4 <wm4@nowhere>2012-11-12 20:06:14 +0100
commitd4bdd0473d6f43132257c9fb3848d829755167a3 (patch)
tree8021c2f7da1841393c8c832105e20cd527826d6c /libmpcodecs/mp_image.c
parentbd48deba77bd5582c5829d6fe73a7d2571088aba (diff)
downloadmpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.bz2
mpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.xz
Rename directories, move files (step 1 of 2) (does not compile)
Tis drops the silly lib prefixes, and attempts to organize the tree in a more logical way. Make the top-level directory less cluttered as well. Renames the following directories: libaf -> audio/filter libao2 -> audio/out libvo -> video/out libmpdemux -> demux Split libmpcodecs: vf* -> video/filter vd*, dec_video.* -> video/decode mp_image*, img_format*, ... -> video/ ad*, dec_audio.* -> audio/decode libaf/format.* is moved to audio/ - this is similar to how mp_image.* is located in video/. Move most top-level .c/.h files to core. (talloc.c/.h is left on top- level, because it's external.) Park some of the more annoying files in compat/. Some of these are relicts from the time mplayer used ffmpeg internals. sub/ is not split, because it's too much of a mess (subtitle code is mixed with OSD display and rendering). Maybe the organization of core is not ideal: it mixes playback core (like mplayer.c) and utility helpers (like bstr.c/h). Should the need arise, the playback core will be moved somewhere else, while core contains all helper and common code.
Diffstat (limited to 'libmpcodecs/mp_image.c')
-rw-r--r--libmpcodecs/mp_image.c280
1 files changed, 0 insertions, 280 deletions
diff --git a/libmpcodecs/mp_image.c b/libmpcodecs/mp_image.c
deleted file mode 100644
index c0227e4b1d..0000000000
--- a/libmpcodecs/mp_image.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "talloc.h"
-
-#include "libmpcodecs/img_format.h"
-#include "libmpcodecs/mp_image.h"
-#include "libmpcodecs/sws_utils.h"
-
-#include "libvo/fastmemcpy.h"
-#include "libavutil/mem.h"
-#include "libavutil/common.h"
-
-void mp_image_alloc_planes(mp_image_t *mpi) {
- if (mpi->imgfmt == IMGFMT_BGRA) {
- mpi->stride[0]=FFALIGN(mpi->width*4,SWS_MIN_BYTE_ALIGN);
- mpi->planes[0]=av_malloc(mpi->stride[0]*mpi->height);
- mpi->flags|=MP_IMGFLAG_ALLOCATED;
- return;
- }
- if (mpi->imgfmt == IMGFMT_444P16 || mpi->imgfmt == IMGFMT_444P) {
- int bp = mpi->imgfmt == IMGFMT_444P16 ? 2 : 1;
- mpi->stride[0]=FFALIGN(mpi->width*bp,SWS_MIN_BYTE_ALIGN);
- mpi->stride[1]=mpi->stride[2]=mpi->stride[0];
- int imgsize = mpi->stride[0] * mpi->height;
- mpi->planes[0]=av_malloc(imgsize*3);
- mpi->planes[1]=mpi->planes[0]+imgsize;
- mpi->planes[2]=mpi->planes[1]+imgsize;
- mpi->flags|=MP_IMGFLAG_ALLOCATED;
- return;
- }
- // IF09 - allocate space for 4. plane delta info - unused
- if (mpi->imgfmt == IMGFMT_IF09) {
- mpi->planes[0]=av_malloc(mpi->bpp*mpi->width*(mpi->height+2)/8+
- mpi->chroma_width*mpi->chroma_height);
- } else
- mpi->planes[0]=av_malloc(mpi->bpp*mpi->width*(mpi->height+2)/8);
- if (!mpi->planes[0])
- abort(); //out of memory
- if (mpi->flags&MP_IMGFLAG_PLANAR) {
- // FIXME this code only supports same bpp for all planes, and bpp divisible
- // by 8. Currently the case for all planar formats.
- int bpp = MP_IMAGE_PLANAR_BITS_PER_PIXEL_ON_PLANE(mpi, 0) / 8;
- // YV12/I420/YVU9/IF09. feel free to add other planar formats here...
- mpi->stride[0]=mpi->stride[3]=bpp*mpi->width;
- if(mpi->num_planes > 2){
- mpi->stride[1]=mpi->stride[2]=bpp*mpi->chroma_width;
- if(mpi->flags&MP_IMGFLAG_SWAPPED){
- // I420/IYUV (Y,U,V)
- mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
- mpi->planes[2]=mpi->planes[1]+mpi->stride[1]*mpi->chroma_height;
- if (mpi->num_planes > 3)
- mpi->planes[3]=mpi->planes[2]+mpi->stride[2]*mpi->chroma_height;
- } else {
- // YV12,YVU9,IF09 (Y,V,U)
- mpi->planes[2]=mpi->planes[0]+mpi->stride[0]*mpi->height;
- mpi->planes[1]=mpi->planes[2]+mpi->stride[1]*mpi->chroma_height;
- if (mpi->num_planes > 3)
- mpi->planes[3]=mpi->planes[1]+mpi->stride[1]*mpi->chroma_height;
- }
- } else {
- // NV12/NV21
- mpi->stride[1]=mpi->chroma_width;
- mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
- }
- } else {
- mpi->stride[0]=mpi->width*mpi->bpp/8;
- if (mpi->flags & MP_IMGFLAG_RGB_PALETTE)
- mpi->planes[1] = av_malloc(1024);
- }
- mpi->flags|=MP_IMGFLAG_ALLOCATED;
-}
-
-mp_image_t* alloc_mpi(int w, int h, unsigned long int fmt) {
- mp_image_t* mpi = new_mp_image(w,h);
-
- mp_image_setfmt(mpi,fmt);
- mp_image_alloc_planes(mpi);
-
- return mpi;
-}
-
-void copy_mpi(mp_image_t *dmpi, mp_image_t *mpi) {
- if(mpi->flags&MP_IMGFLAG_PLANAR){
- memcpy_pic(dmpi->planes[0],mpi->planes[0], MP_IMAGE_BYTES_PER_ROW_ON_PLANE(mpi, 0), mpi->h,
- dmpi->stride[0],mpi->stride[0]);
- memcpy_pic(dmpi->planes[1],mpi->planes[1], MP_IMAGE_BYTES_PER_ROW_ON_PLANE(mpi, 1), mpi->chroma_height,
- dmpi->stride[1],mpi->stride[1]);
- memcpy_pic(dmpi->planes[2], mpi->planes[2], MP_IMAGE_BYTES_PER_ROW_ON_PLANE(mpi, 2), mpi->chroma_height,
- dmpi->stride[2],mpi->stride[2]);
- } else {
- memcpy_pic(dmpi->planes[0],mpi->planes[0],
- MP_IMAGE_BYTES_PER_ROW_ON_PLANE(mpi, 0), mpi->h,
- dmpi->stride[0],mpi->stride[0]);
- }
-}
-
-void mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){
- mpi->flags&=~(MP_IMGFLAG_PLANAR|MP_IMGFLAG_YUV|MP_IMGFLAG_SWAPPED);
- mpi->imgfmt=out_fmt;
- // compressed formats
- if(IMGFMT_IS_HWACCEL(out_fmt)){
- mpi->bpp=0;
- return;
- }
- mpi->num_planes=1;
- if (IMGFMT_IS_RGB(out_fmt)) {
- if (IMGFMT_RGB_DEPTH(out_fmt) < 8 && !(out_fmt&128))
- mpi->bpp = IMGFMT_RGB_DEPTH(out_fmt);
- else
- mpi->bpp=(IMGFMT_RGB_DEPTH(out_fmt)+7)&(~7);
- return;
- }
- if (IMGFMT_IS_BGR(out_fmt)) {
- if (IMGFMT_BGR_DEPTH(out_fmt) < 8 && !(out_fmt&128))
- mpi->bpp = IMGFMT_BGR_DEPTH(out_fmt);
- else
- mpi->bpp=(IMGFMT_BGR_DEPTH(out_fmt)+7)&(~7);
- mpi->flags|=MP_IMGFLAG_SWAPPED;
- return;
- }
- switch (out_fmt) {
- case IMGFMT_BGR0:
- mpi->bpp = 32;
- return;
- }
- mpi->num_planes=3;
- if (out_fmt == IMGFMT_GBRP) {
- mpi->bpp=24;
- mpi->flags|=MP_IMGFLAG_PLANAR;
- return;
- }
- mpi->flags|=MP_IMGFLAG_YUV;
- if (mp_get_chroma_shift(out_fmt, NULL, NULL, NULL)) {
- mpi->flags|=MP_IMGFLAG_PLANAR;
- mpi->bpp = mp_get_chroma_shift(out_fmt, &mpi->chroma_x_shift, &mpi->chroma_y_shift, NULL);
- mpi->chroma_width = mpi->width >> mpi->chroma_x_shift;
- mpi->chroma_height = mpi->height >> mpi->chroma_y_shift;
- }
- switch(out_fmt){
- case IMGFMT_I420:
- case IMGFMT_IYUV:
- mpi->flags|=MP_IMGFLAG_SWAPPED;
- case IMGFMT_YV12:
- return;
- case IMGFMT_420A:
- case IMGFMT_IF09:
- mpi->num_planes=4;
- case IMGFMT_YVU9:
- case IMGFMT_444P:
- case IMGFMT_422P:
- case IMGFMT_411P:
- case IMGFMT_440P:
- case IMGFMT_444P16_LE:
- case IMGFMT_444P16_BE:
- case IMGFMT_444P10_LE:
- case IMGFMT_444P10_BE:
- case IMGFMT_444P9_LE:
- case IMGFMT_444P9_BE:
- case IMGFMT_422P16_LE:
- case IMGFMT_422P16_BE:
- case IMGFMT_422P10_LE:
- case IMGFMT_422P10_BE:
- case IMGFMT_422P9_LE:
- case IMGFMT_422P9_BE:
- case IMGFMT_420P16_LE:
- case IMGFMT_420P16_BE:
- case IMGFMT_420P10_LE:
- case IMGFMT_420P10_BE:
- case IMGFMT_420P9_LE:
- case IMGFMT_420P9_BE:
- return;
- case IMGFMT_Y800:
- case IMGFMT_Y8:
- /* they're planar ones, but for easier handling use them as packed */
- mpi->flags&=~MP_IMGFLAG_PLANAR;
- mpi->num_planes=1;
- return;
- case IMGFMT_UYVY:
- mpi->flags|=MP_IMGFLAG_SWAPPED;
- case IMGFMT_YUY2:
- mpi->chroma_x_shift = 1;
- mpi->chroma_y_shift = 1;
- mpi->chroma_width=(mpi->width>>1);
- mpi->chroma_height=(mpi->height>>1);
- mpi->bpp=16;
- mpi->num_planes=1;
- return;
- case IMGFMT_NV12:
- mpi->flags|=MP_IMGFLAG_SWAPPED;
- case IMGFMT_NV21:
- mpi->flags|=MP_IMGFLAG_PLANAR;
- mpi->bpp=12;
- mpi->num_planes=2;
- mpi->chroma_width=(mpi->width>>0);
- mpi->chroma_height=(mpi->height>>1);
- mpi->chroma_x_shift=0;
- mpi->chroma_y_shift=1;
- return;
- }
- mp_msg(MSGT_DECVIDEO,MSGL_WARN,"mp_image: unknown out_fmt: 0x%X\n",out_fmt);
- mpi->bpp=0;
-}
-
-static int mp_image_destructor(void *ptr)
-{
- mp_image_t *mpi = ptr;
-
- if(mpi->flags&MP_IMGFLAG_ALLOCATED){
- /* because we allocate the whole image at once */
- av_free(mpi->planes[0]);
- if (mpi->flags & MP_IMGFLAG_RGB_PALETTE)
- av_free(mpi->planes[1]);
- }
-
- return 0;
-}
-
-mp_image_t* new_mp_image(int w,int h){
- mp_image_t* mpi = talloc_zero(NULL, mp_image_t);
- talloc_set_destructor(mpi, mp_image_destructor);
- mpi->width=mpi->w=w;
- mpi->height=mpi->h=h;
- return mpi;
-}
-
-void free_mp_image(mp_image_t* mpi){
- talloc_free(mpi);
-}
-
-enum mp_csp mp_image_csp(struct mp_image *img)
-{
- if (img->colorspace != MP_CSP_AUTO)
- return img->colorspace;
- return (img->flags & MP_IMGFLAG_YUV) ? MP_CSP_BT_601 : MP_CSP_RGB;
-}
-
-enum mp_csp_levels mp_image_levels(struct mp_image *img)
-{
- if (img->levels != MP_CSP_LEVELS_AUTO)
- return img->levels;
- return (img->flags & MP_IMGFLAG_YUV) ? MP_CSP_LEVELS_TV : MP_CSP_LEVELS_PC;
-}
-
-void mp_image_set_colorspace_details(struct mp_image *image,
- struct mp_csp_details *csp)
-{
- if (image->flags & MP_IMGFLAG_YUV) {
- image->colorspace = csp->format;
- if (image->colorspace == MP_CSP_AUTO)
- image->colorspace = MP_CSP_BT_601;
- image->levels = csp->levels_in;
- if (image->levels == MP_CSP_LEVELS_AUTO)
- image->levels = MP_CSP_LEVELS_TV;
- } else {
- image->colorspace = MP_CSP_RGB;
- image->levels = MP_CSP_LEVELS_PC;
- }
-}