Changeset 207
- Timestamp:
- 01/05/08 20:03:05
(8 months ago)
- Author:
- sip
- Message:
Fixed rev channel, bitrate tolerance and logging
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r206 |
r207 |
|
| 70 | 70 | AVCodecContext *encoderCtx; |
|---|
| 71 | 71 | AVFrame *encoderPic; |
|---|
| | 72 | int encoderOpened; |
|---|
| 72 | 73 | |
|---|
| 73 | 74 | char* buffer; |
|---|
| … | … | |
| 338 | 339 | return 0; |
|---|
| 339 | 340 | |
|---|
| | 341 | } |
|---|
| | 342 | |
|---|
| | 343 | static int VideoTranscoderDestroy(struct VideoTranscoder *vtc) |
|---|
| | 344 | { |
|---|
| | 345 | /* End encoder */ |
|---|
| | 346 | vtc->end = 1; |
|---|
| | 347 | |
|---|
| | 348 | /* Wait encoder thread to stop */ |
|---|
| | 349 | pthread_join(vtc->encoderThread,0); |
|---|
| | 350 | |
|---|
| | 351 | /* Free pictures */ |
|---|
| | 352 | free(vtc->pictures[0]); |
|---|
| | 353 | free(vtc->pictures[1]); |
|---|
| | 354 | |
|---|
| | 355 | /* Free frames */ |
|---|
| | 356 | free(vtc->frame); |
|---|
| | 357 | free(vtc->buffer); |
|---|
| | 358 | |
|---|
| | 359 | /* Free decoder */ |
|---|
| | 360 | if (vtc->decoderCtx) |
|---|
| | 361 | { |
|---|
| | 362 | /*If already open */ |
|---|
| | 363 | if (vtc->decoderOpened) |
|---|
| | 364 | /* Close */ |
|---|
| | 365 | avcodec_close(vtc->decoderCtx); |
|---|
| | 366 | /* Free */ |
|---|
| | 367 | free(vtc->decoderCtx); |
|---|
| | 368 | } |
|---|
| | 369 | /* Free pic */ |
|---|
| | 370 | if (vtc->decoderPic) |
|---|
| | 371 | free(vtc->decoderPic); |
|---|
| | 372 | |
|---|
| | 373 | /* Free encoder */ |
|---|
| | 374 | if (vtc->encoderCtx) |
|---|
| | 375 | { |
|---|
| | 376 | /* If encoder opened */ |
|---|
| | 377 | if (vtc->encoderOpened) |
|---|
| | 378 | /* Close */ |
|---|
| | 379 | avcodec_close(vtc->encoderCtx); |
|---|
| | 380 | free(vtc->encoderCtx); |
|---|
| | 381 | } |
|---|
| | 382 | /* Free pic */ |
|---|
| | 383 | if (vtc->encoderPic) |
|---|
| | 384 | free(vtc->encoderPic); |
|---|
| | 385 | |
|---|
| | 386 | /* if got contex */ |
|---|
| | 387 | if (vtc->resizeCtx) |
|---|
| | 388 | /* Free it */ |
|---|
| | 389 | sws_freeContext(vtc->resizeCtx); |
|---|
| | 390 | |
|---|
| | 391 | |
|---|
| | 392 | /* Free resize buffer*/ |
|---|
| | 393 | if (vtc->resizeBuffer) |
|---|
| | 394 | /* Free */ |
|---|
| | 395 | free(vtc->resizeBuffer); |
|---|
| | 396 | |
|---|
| | 397 | /* Free */ |
|---|
| | 398 | free(vtc); |
|---|
| | 399 | |
|---|
| | 400 | /* Exit */ |
|---|
| | 401 | return 1; |
|---|
| 340 | 402 | } |
|---|
| 341 | 403 | |
|---|
| … | … | |
| 401 | 463 | } |
|---|
| 402 | 464 | |
|---|
| 403 | | printf("-Transcoder [f=%d,fps=%d,kb=%d,qmin=%d,qmax=%d,gs=%d]\n",vtc->format,vtc->fps,vtc->bitrate,vtc->qMin,vtc->qMax,vtc->gop_size); |
|---|
| | 465 | ast_log(LOG_DEBUG,"-Transcoder [f=%d,fps=%d,kb=%d,qmin=%d,qmax=%d,gs=%d]\n",vtc->format,vtc->fps,vtc->bitrate,vtc->qMin,vtc->qMax,vtc->gop_size); |
|---|
| 404 | 466 | |
|---|
| 405 | 467 | /* Depending on the format */ |
|---|
| … | … | |
| 468 | 530 | //vtc->encoderCtx->opaque = vtc; |
|---|
| 469 | 531 | |
|---|
| 470 | | /* Bitrate */ |
|---|
| 471 | | if (vtc->bitrate>0) |
|---|
| 472 | | { |
|---|
| 473 | | /* Set encoder params */ |
|---|
| 474 | | vtc->encoderCtx->bit_rate = vtc->bitrate; |
|---|
| 475 | | vtc->encoderCtx->bit_rate_tolerance = 1; |
|---|
| 476 | | } |
|---|
| 477 | | |
|---|
| 478 | 532 | /* fps*/ |
|---|
| 479 | 533 | if (vtc->fps>0) |
|---|
| 480 | 534 | /* set encoder params*/ |
|---|
| 481 | 535 | vtc->encoderCtx->time_base = (AVRational){1,vtc->fps};/* frames per second */ |
|---|
| | 536 | |
|---|
| | 537 | /* Bitrate */ |
|---|
| | 538 | if (vtc->bitrate>0 && vtc->fps>0) |
|---|
| | 539 | { |
|---|
| | 540 | /* Set encoder params */ |
|---|
| | 541 | vtc->encoderCtx->bit_rate = vtc->bitrate; |
|---|
| | 542 | vtc->encoderCtx->bit_rate_tolerance = vtc->bitrate*av_q2d(vtc->encoderCtx->time_base) + 1; |
|---|
| | 543 | } |
|---|
| | 544 | |
|---|
| 482 | 545 | |
|---|
| 483 | 546 | /* gop size */ |
|---|
| … | … | |
| 518 | 581 | |
|---|
| 519 | 582 | /* Open encoder */ |
|---|
| 520 | | avcodec_open(vtc->encoderCtx, vtc->encoder); |
|---|
| | 583 | vtc->encoderOpened = avcodec_open(vtc->encoderCtx, vtc->encoder) != -1; |
|---|
| | 584 | |
|---|
| | 585 | /* If not opened correctly */ |
|---|
| | 586 | if (!vtc->encoderOpened) |
|---|
| | 587 | { |
|---|
| | 588 | /* Error */ |
|---|
| | 589 | ast_log(LOG_ERROR,"Error opening encoder\n"); |
|---|
| | 590 | /* Destroy it */ |
|---|
| | 591 | VideoTranscoderDestroy(vtc); |
|---|
| | 592 | /* Exit */ |
|---|
| | 593 | return NULL; |
|---|
| | 594 | } |
|---|
| 521 | 595 | |
|---|
| 522 | 596 | /* Start encoder thread */ |
|---|
| … | … | |
| 525 | 599 | /* Return encoder */ |
|---|
| 526 | 600 | return vtc; |
|---|
| 527 | | } |
|---|
| 528 | | |
|---|
| 529 | | static int VideoTranscoderDestroy(struct VideoTranscoder *vtc) |
|---|
| 530 | | { |
|---|
| 531 | | /* End encoder */ |
|---|
| 532 | | vtc->end = 1; |
|---|
| 533 | | |
|---|
| 534 | | /* Wait encoder thread to stop */ |
|---|
| 535 | | pthread_join(vtc->encoderThread,0); |
|---|
| 536 | | |
|---|
| 537 | | /* Free pictures */ |
|---|
| 538 | | free(vtc->pictures[0]); |
|---|
| 539 | | free(vtc->pictures[1]); |
|---|
| 540 | | |
|---|
| 541 | | /* Free frames */ |
|---|
| 542 | | free(vtc->frame); |
|---|
| 543 | | free(vtc->buffer); |
|---|
| 544 | | |
|---|
| 545 | | /* Free decoder */ |
|---|
| 546 | | if (vtc->decoderCtx) |
|---|
| 547 | | { |
|---|
| 548 | | /*If already open */ |
|---|
| 549 | | if (vtc->decoderOpened) |
|---|
| 550 | | /* Close */ |
|---|
| 551 | | avcodec_close(vtc->decoderCtx); |
|---|
| 552 | | /* Free */ |
|---|
| 553 | | free(vtc->decoderCtx); |
|---|
| 554 | | } |
|---|
| 555 | | /* Free pic */ |
|---|
| 556 | | if (vtc->decoderPic) |
|---|
| 557 | | free(vtc->decoderPic); |
|---|
| 558 | | |
|---|
| 559 | | /* Free encoder */ |
|---|
| 560 | | if (vtc->encoderCtx) |
|---|
| 561 | | { |
|---|
| 562 | | /* Close */ |
|---|
| 563 | | avcodec_close(vtc->encoderCtx); |
|---|
| 564 | | free(vtc->encoderCtx); |
|---|
| 565 | | } |
|---|
| 566 | | /* Free pic */ |
|---|
| 567 | | if (vtc->encoderPic) |
|---|
| 568 | | free(vtc->encoderPic); |
|---|
| 569 | | |
|---|
| 570 | | /* if got contex */ |
|---|
| 571 | | if (vtc->resizeCtx) |
|---|
| 572 | | /* Free it */ |
|---|
| 573 | | sws_freeContext(vtc->resizeCtx); |
|---|
| 574 | | |
|---|
| 575 | | |
|---|
| 576 | | /* Free resize buffer*/ |
|---|
| 577 | | if (vtc->resizeBuffer) |
|---|
| 578 | | /* Free */ |
|---|
| 579 | | free(vtc->resizeBuffer); |
|---|
| 580 | | |
|---|
| 581 | | /* Free */ |
|---|
| 582 | | free(vtc); |
|---|
| 583 | | |
|---|
| 584 | | /* Exit */ |
|---|
| 585 | | return 1; |
|---|
| 586 | 601 | } |
|---|
| 587 | 602 | |
|---|
| … | … | |
| 819 | 834 | |
|---|
| 820 | 835 | }else{ |
|---|
| 821 | | printf("-Unknown codec [%d]\n",codec); |
|---|
| | 836 | ast_log(LOG_ERROR,"-Unknown codec [%d]\n",codec); |
|---|
| 822 | 837 | return 0; |
|---|
| 823 | 838 | } |
|---|
| … | … | |
| 854 | 869 | char *b; |
|---|
| 855 | 870 | |
|---|
| 856 | | |
|---|
| 857 | 871 | /* Find fwd params */ |
|---|
| 858 | 872 | if (!(a=strchr((char*)data,'|'))) |
|---|
| … | … | |
| 867 | 881 | local = strndup(a+1,b-a-1); |
|---|
| 868 | 882 | revParams = strndup(b+1,strlen((char*)data)-(b-(char*)data)-1); |
|---|
| 869 | | |
|---|
| 870 | | printf("-transcoding [%s,%s,%s]\n",fwdParams,local,revParams); |
|---|
| 871 | | |
|---|
| 872 | | /* Create contexts */ |
|---|
| 873 | | fwd = VideoTranscoderCreate(chan,fwdParams); |
|---|
| 874 | | rev = VideoTranscoderCreate(chan,revParams); |
|---|
| 875 | 883 | |
|---|
| 876 | 884 | /* Lock module */ |
|---|
| … | … | |
| 885 | 893 | goto end; |
|---|
| 886 | 894 | |
|---|
| 887 | | /* Free params */ |
|---|
| 888 | | free(fwdParams); |
|---|
| 889 | | free(local); |
|---|
| 890 | | free(revParams); |
|---|
| | 895 | /* Log */ |
|---|
| | 896 | ast_log(LOG_WARNING,"Transcoding [%s,%s,%s]\n",fwdParams,local,revParams); |
|---|
| | 897 | |
|---|
| | 898 | /* Create contexts */ |
|---|
| | 899 | fwd = VideoTranscoderCreate(pseudo,fwdParams); |
|---|
| | 900 | rev = VideoTranscoderCreate(chan,revParams); |
|---|
| 891 | 901 | |
|---|
| 892 | 902 | /* Set caller id */ |
|---|
| … | … | |
| 1023 | 1033 | |
|---|
| 1024 | 1034 | end: |
|---|
| | 1035 | /* Free params */ |
|---|
| | 1036 | free(fwdParams); |
|---|
| | 1037 | free(local); |
|---|
| | 1038 | free(revParams); |
|---|
| | 1039 | |
|---|
| 1025 | 1040 | /* Destroy transcoders */ |
|---|
| 1026 | 1041 | if (fwd) |
|---|
| … | … | |
| 1048 | 1063 | return res; |
|---|
| 1049 | 1064 | } |
|---|
| | 1065 | void av_log_asterisk_callback(void* ptr, int level, const char* fmt, va_list vl) |
|---|
| | 1066 | { |
|---|
| | 1067 | char msg[1024]; |
|---|
| | 1068 | |
|---|
| | 1069 | vsnprintf(msg,1024,fmt,vl); |
|---|
| | 1070 | |
|---|
| | 1071 | AVClass* avc= ptr ? *(AVClass**)ptr : NULL; |
|---|
| | 1072 | if(avc) |
|---|
| | 1073 | ast_log(LOG_DEBUG,"[%s @ %p] %s",avc->item_name(ptr), avc, msg); |
|---|
| | 1074 | else |
|---|
| | 1075 | ast_log(LOG_DEBUG, msg); |
|---|
| | 1076 | } |
|---|
| 1050 | 1077 | |
|---|
| 1051 | 1078 | static int load_module(void) |
|---|
| 1052 | 1079 | { |
|---|
| | 1080 | /* Set log */ |
|---|
| | 1081 | av_log_set_callback(av_log_asterisk_callback); |
|---|
| | 1082 | |
|---|
| 1053 | 1083 | /* Init avcodec */ |
|---|
| 1054 | 1084 | avcodec_init(); |
|---|
Download in other formats:
|
|