Guest

Untitled

By: a guest on Jan 28th, 2012  |  syntax: None  |  size: 2.31 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. Index: libhb/muxmp4.c
  2. ===================================================================
  3. --- libhb/muxmp4.c      (revision 2358)
  4. +++ libhb/muxmp4.c      (working copy)
  5. @@ -515,18 +515,49 @@
  6.      }
  7.  
  8.      // Here's where the sample actually gets muxed.
  9. -    if( !MP4WriteSample( m->file,
  10. -                         mux_data->track,
  11. -                         buf->data,
  12. -                         buf->size,
  13. -                         duration,
  14. -                         offset,
  15. -                         ( job->vcodec == HB_VCODEC_X264 && mux_data == job->mux_data ) ?
  16. -                            ( buf->frametype == HB_FRAME_IDR ) : ( ( buf->frametype & HB_FRAME_KEY ) != 0 ) ) )
  17. +    if( job->vcodec == HB_VCODEC_X264 && mux_data == job->mux_data )
  18.      {
  19. -        hb_error("Failed to write to output file, disk full?");
  20. -        *job->die = 1;
  21. +        // map HB frame -> MP4 frame
  22. +        MP4H264FrameType ft;
  23. +        switch( buf->frametype )
  24. +        {
  25. +            case HB_FRAME_IDR:  ft = MP4_H264_FRAME_IDR;  break;
  26. +            case HB_FRAME_I:    ft = MP4_H264_FRAME_I;    break;
  27. +            case HB_FRAME_P:    ft = MP4_H264_FRAME_P;    break;
  28. +            case HB_FRAME_BREF: ft = MP4_H264_FRAME_BREF; break;
  29. +            case HB_FRAME_B:    ft = MP4_H264_FRAME_B;    break;
  30. +
  31. +            default:
  32. +                ft = MP4_H264_FRAME_UNDEFINED;
  33. +                break;
  34. +        }
  35. +
  36. +        if( !MP4WriteH264Sample( m->file,
  37. +                                 mux_data->track,
  38. +                                 buf->data,
  39. +                                 buf->size,
  40. +                                 duration,
  41. +                                 offset,
  42. +                                 ft ))
  43. +        {
  44. +            hb_error("Failed to write to output file, disk full?");
  45. +            *job->die = 1;
  46. +        }
  47.      }
  48. +    else
  49. +    {
  50. +        if( !MP4WriteSample( m->file,
  51. +                             mux_data->track,
  52. +                             buf->data,
  53. +                             buf->size,
  54. +                             duration,
  55. +                             offset,
  56. +                             ( buf->frametype & HB_FRAME_KEY ) != 0 ))
  57. +        {
  58. +            hb_error("Failed to write to output file, disk full?");
  59. +            *job->die = 1;
  60. +        }
  61. +    }
  62.  
  63.      return 0;
  64.  }