Changeset 32759
- Timestamp:
- 01/28/15 20:08:57 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/titan/player.h
r32743 r32759 30 30 #ifdef EPLAYER4 31 31 GstElement *pipeline = NULL; 32 gdouble m_framerate; 32 33 unsigned long long m_gst_startpts = 0; 33 34 CustomData data; 34 35 GstElement *video_sink = NULL; 35 36 struct stimerthread* subtitlethread = NULL; 36 int buf_pos_ms = 0;37 int duration_ms = 0;37 uint32_t buf_pos_ms = 0; 38 uint32_t duration_ms = 0; 38 39 int subtitleflag = 0; 39 40 char *subtext = NULL; … … 641 642 void playersubtitleAvail(GstElement *subsink, GstBuffer *buffer, gpointer user_data) 642 643 { 644 printf("++++++ subtitelflag: %i\n", subtitleflag); 643 645 if(subtitleflag == 0 || subtitleflag == 2) return; 644 646 … … 646 648 gint64 duration_ns = GST_BUFFER_DURATION(buffer); 647 649 650 time_t running_pts = 0; 651 gint64 pos = 0; 652 int32_t decoder_ms; 653 GstFormat fmt = GST_FORMAT_TIME; 654 648 655 #if GST_VERSION_MAJOR < 1 649 size_t len = GST_BUFFER_SIZE(buffer);656 if (!gst_element_query_position(pipeline, &fmt, &pos)) 650 657 #else 651 size_t len = gst_buffer_get_size(buffer); 652 #endif 653 658 if (!gst_element_query_position(pipeline, fmt, &pos)) 659 #endif 660 { 661 err("gst_element_query_position failed"); 662 return; 663 } 664 running_pts = pos / 11111LL; 665 decoder_ms = running_pts / 90; 666 654 667 if(subtitlethread == NULL) 655 668 subtitlethread = addtimer(&playersubtitle_thread, START, 10000, 1, NULL, NULL, NULL); 669 670 #if GST_VERSION_MAJOR < 1 671 size_t len = GST_BUFFER_SIZE(buffer); 672 #else 673 size_t len = gst_buffer_get_size(buffer); 674 #endif 656 675 657 676 printf("BUFFER_TIMESTAMP: %lld - BUFFER_DURATION: %lld in ns\n", buf_pos, duration_ns); … … 672 691 } 673 692 sprintf(subtext, "%s", GST_BUFFER_DATA(buffer)); 674 buf_pos_ms = buf_pos / 1000000ULL; 693 694 double convert_fps = 1.0; 695 buf_pos_ms = (buf_pos / 1000000ULL) * convert_fps; 675 696 duration_ms = duration_ns / 1000000ULL; 697 698 printf("++++++ buff_pos : %u\n", buf_pos_ms); 699 printf("++++++ decoder_ms: %i\n", decoder_ms); 676 700 } 677 701 #endif … … 810 834 //status.playercan = 0x7EFF; 811 835 status.playercan = 0xFEFF; 812 836 837 m_framerate = -1; 813 838 pipeline = gst_element_factory_make("playbin2", "playbin"); 814 839 … … 1077 1102 // break; 1078 1103 case GST_MESSAGE_ELEMENT: 1104 printf("***************----***************-----**********\n"); 1105 const GstStructure *msgstruct = gst_message_get_structure(msg); 1106 if (msgstruct) 1107 { 1108 const gchar *eventname = gst_structure_get_name(msgstruct); 1109 if (!strcmp(eventname, "eventFrameRateChanged") || !strcmp(eventname, "eventFrameRateAvail")) 1110 { 1111 gst_structure_get_int (msgstruct, "frame_rate", &m_framerate); 1112 } 1113 } 1079 1114 debug(150, "gst player element"); 1080 1115 break; … … 1448 1483 { 1449 1484 if(status.playspeed != 0 || status.slowspeed != 0) 1450 playersend_ff_fr_event(1); 1485 { 1486 //subtitle sync bug... start 1487 gint64 time_nanoseconds = 0; 1488 GstFormat fmt = GST_FORMAT_TIME; 1489 #if GST_VERSION_MAJOR < 1 1490 if (!gst_element_query_position(pipeline, &fmt, &time_nanoseconds)) 1491 #else 1492 if (!gst_element_query_position(pipeline, fmt, &time_nanoseconds)) 1493 #endif 1494 { 1495 err("gst_element_query_position failed"); 1496 return; 1497 } 1498 time_nanoseconds = time_nanoseconds - 90000; 1499 if (!gst_element_seek (pipeline, 1, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT),GST_SEEK_TYPE_SET, time_nanoseconds,GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) 1500 printf("seekTo failed"); 1501 //subtitle sync bug... end 1502 1503 //playersend_ff_fr_event(1); 1504 } 1451 1505 gst_element_set_state(pipeline, GST_STATE_PLAYING); 1452 1506 if(subtitleflag == 2)
Note: See TracChangeset
for help on using the changeset viewer.