OSDN Git Service

disable asserts in libdvdnav except when configured with --debug=max
[handbrake-jp/handbrake-jp-git.git] / libhb / muxmkv.c
index 2e8814c..d30e7c0 100644 (file)
@@ -399,31 +399,33 @@ static int MKVMux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
             }
             mk_addFrameData(m->file, mux_data->track, op->packet, op->bytes);
             mk_setFrameFlags(m->file, mux_data->track, timecode, 1, 0);
+            hb_buffer_close( &buf );
             return 0;
         }
     }
     else if ( mux_data->subtitle )
     {
+        uint64_t   duration;
         timecode = buf->start * TIMECODE_SCALE;
         if( mk_startFrame(m->file, mux_data->track) < 0)
         {
             hb_error( "Failed to write frame to output file, Disk Full?" );
             *job->die = 1;
         }
+
+        duration = buf->stop * TIMECODE_SCALE - timecode;
         if( mux_data->sub_format == TEXTSUB )
         {
-            uint64_t   duration;
-
-            duration = buf->stop * TIMECODE_SCALE - timecode;
             mk_addFrameData(m->file, mux_data->track, buf->data, buf->size);
             mk_setFrameFlags(m->file, mux_data->track, timecode, 1, duration);
         }
         else
         {
             mk_addFrameData(m->file, mux_data->track, buf->data, buf->size);
-            mk_setFrameFlags(m->file, mux_data->track, timecode, 1, 0);
+            mk_setFrameFlags(m->file, mux_data->track, timecode, 1, duration);
         }
         mk_flushFrame(m->file, mux_data->track);
+        hb_buffer_close( &buf );
         return 0;
     }
     else
@@ -442,6 +444,7 @@ static int MKVMux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
             }
             mk_addFrameData(m->file, mux_data->track, op->packet, op->bytes);
             mk_setFrameFlags(m->file, mux_data->track, timecode, 1, 0);
+            hb_buffer_close( &buf );
             return 0;
         }
     }
@@ -457,6 +460,7 @@ static int MKVMux( hb_mux_object_t * m, hb_mux_data_t * mux_data,
                        mux_data == job->mux_data) ? 
                             (buf->frametype == HB_FRAME_IDR) : 
                             ((buf->frametype & HB_FRAME_KEY) != 0)), 0 );
+    hb_buffer_close( &buf );
     return 0;
 }