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);