comparison pnmenc.c @ 10460:059265d3cc65 libavcodec

Move PNM init/end functions to the PNM common code. This is done in preparation for the PNM encoder/decoder split.
author diego
date Tue, 27 Oct 2009 17:15:05 +0000
parents a6bb56636f90
children 267588850827
comparison
equal deleted inserted replaced
10459:a6bb56636f90 10460:059265d3cc65
21 21
22 #include "avcodec.h" 22 #include "avcodec.h"
23 #include "bytestream.h" 23 #include "bytestream.h"
24 #include "pnm.h" 24 #include "pnm.h"
25 25
26
27 static av_cold int common_init(AVCodecContext *avctx)
28 {
29 PNMContext *s = avctx->priv_data;
30
31 avcodec_get_frame_defaults((AVFrame*)&s->picture);
32 avctx->coded_frame = (AVFrame*)&s->picture;
33
34 return 0;
35 }
36 26
37 static int pnm_decode_frame(AVCodecContext *avctx, void *data, 27 static int pnm_decode_frame(AVCodecContext *avctx, void *data,
38 int *data_size, AVPacket *avpkt) 28 int *data_size, AVPacket *avpkt)
39 { 29 {
40 const uint8_t *buf = avpkt->data; 30 const uint8_t *buf = avpkt->data;
330 } 320 }
331 } 321 }
332 return s->bytestream - s->bytestream_start; 322 return s->bytestream - s->bytestream_start;
333 } 323 }
334 324
335 static av_cold int common_end(AVCodecContext *avctx)
336 {
337 PNMContext *s = avctx->priv_data;
338
339 if (s->picture.data[0])
340 avctx->release_buffer(avctx, &s->picture);
341
342 return 0;
343 }
344
345 325
346 #if CONFIG_PGM_DECODER 326 #if CONFIG_PGM_DECODER
347 AVCodec pgm_decoder = { 327 AVCodec pgm_decoder = {
348 "pgm", 328 "pgm",
349 CODEC_TYPE_VIDEO, 329 CODEC_TYPE_VIDEO,
350 CODEC_ID_PGM, 330 CODEC_ID_PGM,
351 sizeof(PNMContext), 331 sizeof(PNMContext),
352 common_init, 332 ff_pnm_init,
353 NULL, 333 NULL,
354 common_end, 334 ff_pnm_end,
355 pnm_decode_frame, 335 pnm_decode_frame,
356 CODEC_CAP_DR1, 336 CODEC_CAP_DR1,
357 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_GRAY8, PIX_FMT_GRAY16BE, PIX_FMT_NONE}, 337 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_GRAY8, PIX_FMT_GRAY16BE, PIX_FMT_NONE},
358 .long_name = NULL_IF_CONFIG_SMALL("PGM (Portable GrayMap) image"), 338 .long_name = NULL_IF_CONFIG_SMALL("PGM (Portable GrayMap) image"),
359 }; 339 };
363 AVCodec pgm_encoder = { 343 AVCodec pgm_encoder = {
364 "pgm", 344 "pgm",
365 CODEC_TYPE_VIDEO, 345 CODEC_TYPE_VIDEO,
366 CODEC_ID_PGM, 346 CODEC_ID_PGM,
367 sizeof(PNMContext), 347 sizeof(PNMContext),
368 common_init, 348 ff_pnm_init,
369 pnm_encode_frame, 349 pnm_encode_frame,
370 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_GRAY8, PIX_FMT_GRAY16BE, PIX_FMT_NONE}, 350 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_GRAY8, PIX_FMT_GRAY16BE, PIX_FMT_NONE},
371 .long_name = NULL_IF_CONFIG_SMALL("PGM (Portable GrayMap) image"), 351 .long_name = NULL_IF_CONFIG_SMALL("PGM (Portable GrayMap) image"),
372 }; 352 };
373 #endif 353 #endif
376 AVCodec pgmyuv_decoder = { 356 AVCodec pgmyuv_decoder = {
377 "pgmyuv", 357 "pgmyuv",
378 CODEC_TYPE_VIDEO, 358 CODEC_TYPE_VIDEO,
379 CODEC_ID_PGMYUV, 359 CODEC_ID_PGMYUV,
380 sizeof(PNMContext), 360 sizeof(PNMContext),
381 common_init, 361 ff_pnm_init,
382 NULL, 362 NULL,
383 common_end, 363 ff_pnm_end,
384 pnm_decode_frame, 364 pnm_decode_frame,
385 CODEC_CAP_DR1, 365 CODEC_CAP_DR1,
386 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, 366 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
387 .long_name = NULL_IF_CONFIG_SMALL("PGMYUV (Portable GrayMap YUV) image"), 367 .long_name = NULL_IF_CONFIG_SMALL("PGMYUV (Portable GrayMap YUV) image"),
388 }; 368 };
392 AVCodec pgmyuv_encoder = { 372 AVCodec pgmyuv_encoder = {
393 "pgmyuv", 373 "pgmyuv",
394 CODEC_TYPE_VIDEO, 374 CODEC_TYPE_VIDEO,
395 CODEC_ID_PGMYUV, 375 CODEC_ID_PGMYUV,
396 sizeof(PNMContext), 376 sizeof(PNMContext),
397 common_init, 377 ff_pnm_init,
398 pnm_encode_frame, 378 pnm_encode_frame,
399 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, 379 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
400 .long_name = NULL_IF_CONFIG_SMALL("PGMYUV (Portable GrayMap YUV) image"), 380 .long_name = NULL_IF_CONFIG_SMALL("PGMYUV (Portable GrayMap YUV) image"),
401 }; 381 };
402 #endif 382 #endif
405 AVCodec ppm_decoder = { 385 AVCodec ppm_decoder = {
406 "ppm", 386 "ppm",
407 CODEC_TYPE_VIDEO, 387 CODEC_TYPE_VIDEO,
408 CODEC_ID_PPM, 388 CODEC_ID_PPM,
409 sizeof(PNMContext), 389 sizeof(PNMContext),
410 common_init, 390 ff_pnm_init,
411 NULL, 391 NULL,
412 common_end, 392 ff_pnm_end,
413 pnm_decode_frame, 393 pnm_decode_frame,
414 CODEC_CAP_DR1, 394 CODEC_CAP_DR1,
415 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB48BE, PIX_FMT_NONE}, 395 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB48BE, PIX_FMT_NONE},
416 .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"), 396 .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"),
417 }; 397 };
421 AVCodec ppm_encoder = { 401 AVCodec ppm_encoder = {
422 "ppm", 402 "ppm",
423 CODEC_TYPE_VIDEO, 403 CODEC_TYPE_VIDEO,
424 CODEC_ID_PPM, 404 CODEC_ID_PPM,
425 sizeof(PNMContext), 405 sizeof(PNMContext),
426 common_init, 406 ff_pnm_init,
427 pnm_encode_frame, 407 pnm_encode_frame,
428 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB48BE, PIX_FMT_NONE}, 408 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB48BE, PIX_FMT_NONE},
429 .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"), 409 .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"),
430 }; 410 };
431 #endif 411 #endif
434 AVCodec pbm_decoder = { 414 AVCodec pbm_decoder = {
435 "pbm", 415 "pbm",
436 CODEC_TYPE_VIDEO, 416 CODEC_TYPE_VIDEO,
437 CODEC_ID_PBM, 417 CODEC_ID_PBM,
438 sizeof(PNMContext), 418 sizeof(PNMContext),
439 common_init, 419 ff_pnm_init,
440 NULL, 420 NULL,
441 common_end, 421 ff_pnm_end,
442 pnm_decode_frame, 422 pnm_decode_frame,
443 CODEC_CAP_DR1, 423 CODEC_CAP_DR1,
444 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_MONOWHITE, PIX_FMT_NONE}, 424 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_MONOWHITE, PIX_FMT_NONE},
445 .long_name = NULL_IF_CONFIG_SMALL("PBM (Portable BitMap) image"), 425 .long_name = NULL_IF_CONFIG_SMALL("PBM (Portable BitMap) image"),
446 }; 426 };
450 AVCodec pbm_encoder = { 430 AVCodec pbm_encoder = {
451 "pbm", 431 "pbm",
452 CODEC_TYPE_VIDEO, 432 CODEC_TYPE_VIDEO,
453 CODEC_ID_PBM, 433 CODEC_ID_PBM,
454 sizeof(PNMContext), 434 sizeof(PNMContext),
455 common_init, 435 ff_pnm_init,
456 pnm_encode_frame, 436 pnm_encode_frame,
457 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_MONOWHITE, PIX_FMT_NONE}, 437 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_MONOWHITE, PIX_FMT_NONE},
458 .long_name = NULL_IF_CONFIG_SMALL("PBM (Portable BitMap) image"), 438 .long_name = NULL_IF_CONFIG_SMALL("PBM (Portable BitMap) image"),
459 }; 439 };
460 #endif 440 #endif
463 AVCodec pam_decoder = { 443 AVCodec pam_decoder = {
464 "pam", 444 "pam",
465 CODEC_TYPE_VIDEO, 445 CODEC_TYPE_VIDEO,
466 CODEC_ID_PAM, 446 CODEC_ID_PAM,
467 sizeof(PNMContext), 447 sizeof(PNMContext),
468 common_init, 448 ff_pnm_init,
469 NULL, 449 NULL,
470 common_end, 450 ff_pnm_end,
471 pnm_decode_frame, 451 pnm_decode_frame,
472 CODEC_CAP_DR1, 452 CODEC_CAP_DR1,
473 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, PIX_FMT_NONE}, 453 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, PIX_FMT_NONE},
474 .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"), 454 .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"),
475 }; 455 };
479 AVCodec pam_encoder = { 459 AVCodec pam_encoder = {
480 "pam", 460 "pam",
481 CODEC_TYPE_VIDEO, 461 CODEC_TYPE_VIDEO,
482 CODEC_ID_PAM, 462 CODEC_ID_PAM,
483 sizeof(PNMContext), 463 sizeof(PNMContext),
484 common_init, 464 ff_pnm_init,
485 pam_encode_frame, 465 pam_encode_frame,
486 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, PIX_FMT_NONE}, 466 .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, PIX_FMT_NONE},
487 .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"), 467 .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"),
488 }; 468 };
489 #endif 469 #endif