Mercurial > mplayer.hg
comparison libmpcodecs/vf_tfields.c @ 10078:379f48cace77
support more image formats. hopefully this bpp handling is correct...
author | rfelker |
---|---|
date | Tue, 06 May 2003 02:36:44 +0000 |
parents | b358b7509e1a |
children | 821f464b4d90 |
comparison
equal
deleted
inserted
replaced
10077:c1c35a94f695 | 10078:379f48cace77 |
---|---|
313 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi) | 313 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi) |
314 { | 314 { |
315 int ret; | 315 int ret; |
316 mp_image_t *dmpi; | 316 mp_image_t *dmpi; |
317 void (*qpel)(unsigned char *, unsigned char *, int, int, int, int, int); | 317 void (*qpel)(unsigned char *, unsigned char *, int, int, int, int, int); |
318 int bpp=1; | |
319 | |
320 if (!(mpi->flags & MP_IMGFLAG_PLANAR)) bpp = mpi->bpp/8; | |
318 | 321 |
319 switch (vf->priv->mode) { | 322 switch (vf->priv->mode) { |
320 case 2: | 323 case 2: |
321 qpel = qpel_li; | 324 qpel = qpel_li; |
322 break; | 325 break; |
332 switch (vf->priv->mode) { | 335 switch (vf->priv->mode) { |
333 case 0: | 336 case 0: |
334 dmpi = vf_get_image(vf->next, mpi->imgfmt, | 337 dmpi = vf_get_image(vf->next, mpi->imgfmt, |
335 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, | 338 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, |
336 mpi->width, mpi->height/2); | 339 mpi->width, mpi->height/2); |
337 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h/2, | 340 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2, |
338 dmpi->stride[0], mpi->stride[0]*2); | 341 dmpi->stride[0], mpi->stride[0]*2); |
339 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 342 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
340 memcpy_pic(dmpi->planes[1], mpi->planes[1], | 343 memcpy_pic(dmpi->planes[1], mpi->planes[1], |
341 mpi->chroma_width, mpi->chroma_height/2, | 344 mpi->chroma_width, mpi->chroma_height/2, |
342 dmpi->stride[1], mpi->stride[1]*2); | 345 dmpi->stride[1], mpi->stride[1]*2); |
346 } | 349 } |
347 ret = vf_next_put_image(vf, dmpi); | 350 ret = vf_next_put_image(vf, dmpi); |
348 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); | 351 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); |
349 | 352 |
350 memcpy_pic(dmpi->planes[0], mpi->planes[0] + mpi->stride[0], | 353 memcpy_pic(dmpi->planes[0], mpi->planes[0] + mpi->stride[0], |
351 mpi->w, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2); | 354 mpi->w*bpp, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2); |
352 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 355 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
353 memcpy_pic(dmpi->planes[1], mpi->planes[1] + mpi->stride[1], | 356 memcpy_pic(dmpi->planes[1], mpi->planes[1] + mpi->stride[1], |
354 mpi->chroma_width, mpi->chroma_height/2, | 357 mpi->chroma_width, mpi->chroma_height/2, |
355 dmpi->stride[1], mpi->stride[1]*2); | 358 dmpi->stride[1], mpi->stride[1]*2); |
356 memcpy_pic(dmpi->planes[2], mpi->planes[2] + mpi->stride[2], | 359 memcpy_pic(dmpi->planes[2], mpi->planes[2] + mpi->stride[2], |
360 return vf_next_put_image(vf, dmpi) || ret; | 363 return vf_next_put_image(vf, dmpi) || ret; |
361 case 1: | 364 case 1: |
362 dmpi = vf_get_image(vf->next, mpi->imgfmt, | 365 dmpi = vf_get_image(vf->next, mpi->imgfmt, |
363 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, | 366 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, |
364 mpi->width, mpi->height); | 367 mpi->width, mpi->height); |
365 my_memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h/2, | 368 my_memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2, |
366 dmpi->stride[0]*2, mpi->stride[0]*2); | 369 dmpi->stride[0]*2, mpi->stride[0]*2); |
367 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 0); | 370 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 0); |
368 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 371 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
369 my_memcpy_pic(dmpi->planes[1], mpi->planes[1], | 372 my_memcpy_pic(dmpi->planes[1], mpi->planes[1], |
370 mpi->chroma_width, mpi->chroma_height/2, | 373 mpi->chroma_width, mpi->chroma_height/2, |
379 } | 382 } |
380 ret = vf_next_put_image(vf, dmpi); | 383 ret = vf_next_put_image(vf, dmpi); |
381 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); | 384 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); |
382 | 385 |
383 my_memcpy_pic(dmpi->planes[0] + dmpi->stride[0], mpi->planes[0] + mpi->stride[0], | 386 my_memcpy_pic(dmpi->planes[0] + dmpi->stride[0], mpi->planes[0] + mpi->stride[0], |
384 mpi->w, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2); | 387 mpi->w*bpp, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2); |
385 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 1); | 388 deint(dmpi->planes[0], dmpi->stride[0], mpi->planes[0], mpi->stride[0], mpi->w, mpi->h, 1); |
386 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 389 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
387 my_memcpy_pic(dmpi->planes[1] + dmpi->stride[1], mpi->planes[1] + mpi->stride[1], | 390 my_memcpy_pic(dmpi->planes[1] + dmpi->stride[1], mpi->planes[1] + mpi->stride[1], |
388 mpi->chroma_width, mpi->chroma_height/2, | 391 mpi->chroma_width, mpi->chroma_height/2, |
389 dmpi->stride[1]*2, mpi->stride[1]*2); | 392 dmpi->stride[1]*2, mpi->stride[1]*2); |
400 case 3: | 403 case 3: |
401 case 4: | 404 case 4: |
402 dmpi = vf_get_image(vf->next, mpi->imgfmt, | 405 dmpi = vf_get_image(vf->next, mpi->imgfmt, |
403 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, | 406 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, |
404 mpi->width, mpi->height/2); | 407 mpi->width, mpi->height/2); |
405 qpel(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h/2, | 408 qpel(dmpi->planes[0], mpi->planes[0], mpi->w*bpp, mpi->h/2, |
406 dmpi->stride[0], mpi->stride[0]*2, 0); | 409 dmpi->stride[0], mpi->stride[0]*2, 0); |
407 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 410 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
408 qpel(dmpi->planes[1], mpi->planes[1], | 411 qpel(dmpi->planes[1], mpi->planes[1], |
409 mpi->chroma_width, mpi->chroma_height/2, | 412 mpi->chroma_width, mpi->chroma_height/2, |
410 dmpi->stride[1], mpi->stride[1]*2, 0); | 413 dmpi->stride[1], mpi->stride[1]*2, 0); |
414 } | 417 } |
415 ret = vf_next_put_image(vf, dmpi); | 418 ret = vf_next_put_image(vf, dmpi); |
416 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); | 419 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); |
417 | 420 |
418 qpel(dmpi->planes[0], mpi->planes[0] + mpi->stride[0], | 421 qpel(dmpi->planes[0], mpi->planes[0] + mpi->stride[0], |
419 mpi->w, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2, 1); | 422 mpi->w*bpp, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2, 1); |
420 if (mpi->flags & MP_IMGFLAG_PLANAR) { | 423 if (mpi->flags & MP_IMGFLAG_PLANAR) { |
421 qpel(dmpi->planes[1], mpi->planes[1] + mpi->stride[1], | 424 qpel(dmpi->planes[1], mpi->planes[1] + mpi->stride[1], |
422 mpi->chroma_width, mpi->chroma_height/2, | 425 mpi->chroma_width, mpi->chroma_height/2, |
423 dmpi->stride[1], mpi->stride[1]*2, 1); | 426 dmpi->stride[1], mpi->stride[1]*2, 1); |
424 qpel(dmpi->planes[2], mpi->planes[2] + mpi->stride[2], | 427 qpel(dmpi->planes[2], mpi->planes[2] + mpi->stride[2], |
466 static int open(vf_instance_t *vf, char* args) | 469 static int open(vf_instance_t *vf, char* args) |
467 { | 470 { |
468 struct vf_priv_s *p; | 471 struct vf_priv_s *p; |
469 vf->config = config; | 472 vf->config = config; |
470 vf->put_image = put_image; | 473 vf->put_image = put_image; |
471 vf->query_format = query_format; | 474 //vf->query_format = query_format; |
472 vf->uninit = uninit; | 475 vf->uninit = uninit; |
473 vf->default_reqs = VFCAP_ACCEPT_STRIDE; | 476 vf->default_reqs = VFCAP_ACCEPT_STRIDE; |
474 vf->priv = p = calloc(1, sizeof(struct vf_priv_s)); | 477 vf->priv = p = calloc(1, sizeof(struct vf_priv_s)); |
475 vf->priv->mode = 0; | 478 vf->priv->mode = 0; |
476 if (args) sscanf(args, "%d", &vf->priv->mode); | 479 if (args) sscanf(args, "%d", &vf->priv->mode); |