MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / sender_thread

Function sender_thread

tests/api/api-threadmessage-test.c:63–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61}
62
63static void *sender_thread(void *arg)
64{
65 int i, ret = 0;
66 struct sender_data *wd = arg;
67
68 av_log(NULL, AV_LOG_INFO, "sender #%d: workload=%d\n", wd->id, wd->workload);
69 for (i = 0; i < wd->workload; i++) {
70 if (rand() % wd->workload < wd->workload / 10) {
71 av_log(NULL, AV_LOG_INFO, "sender #%d: flushing the queue\n", wd->id);
72 av_thread_message_flush(wd->queue);
73 } else {
74 char *val;
75 AVDictionary *meta = NULL;
76 struct message msg = {
77 .magic = MAGIC,
78 .frame = av_frame_alloc(),
79 };
80
81 if (!msg.frame) {
82 ret = AVERROR(ENOMEM);
83 break;
84 }
85
86 /* we add some metadata to identify the frames */
87 val = av_asprintf("frame %d/%d from sender %d",
88 i + 1, wd->workload, wd->id);
89 if (!val) {
90 av_frame_free(&msg.frame);
91 ret = AVERROR(ENOMEM);
92 break;
93 }
94 ret = av_dict_set(&meta, "sig", val, AV_DICT_DONT_STRDUP_VAL);
95 if (ret < 0) {
96 av_frame_free(&msg.frame);
97 break;
98 }
99 msg.frame->metadata = meta;
100
101 /* allocate a real frame in order to simulate "real" work */
102 msg.frame->format = AV_PIX_FMT_RGBA;
103 msg.frame->width = 320;
104 msg.frame->height = 240;
105 ret = av_frame_get_buffer(msg.frame, 0);
106 if (ret < 0) {
107 av_frame_free(&msg.frame);
108 break;
109 }
110
111 /* push the frame in the common queue */
112 av_log(NULL, AV_LOG_INFO, "sender #%d: sending my work (%d/%d frame:%p)\n",
113 wd->id, i + 1, wd->workload, msg.frame);
114 ret = av_thread_message_queue_send(wd->queue, &msg, 0);
115 if (ret < 0) {
116 av_frame_free(&msg.frame);
117 break;
118 }
119 }
120 }

Callers

nothing calls this directly

Calls 9

av_logFunction · 0.85
av_thread_message_flushFunction · 0.85
av_frame_allocFunction · 0.85
av_asprintfFunction · 0.85
av_frame_freeFunction · 0.85
av_dict_setFunction · 0.85
av_frame_get_bufferFunction · 0.85

Tested by

no test coverage detected