<div dir="ltr">Hi all,<div>  Having trouble trying to understand why AMD is receiving just AST_FRAME_NULL and failing to analise audio. It seams only to happen when I use a Local proxy channel, and only in one server I have (many others, same software, no issue).</div><div><br></div><div>  Digging trought the code I came to the piece of code bellow.</div><div><br></div><div>  My question is (sorry if is a dumb one):</div><div>  - The code is iterating trough all the audiohooks on the channel, calling its callback with the AST_FRAMEHOOK_EVENT_READ and receiving an "ast_frame" pointer as a return.</div><div><br></div><div>  - There can be many framehooks in the list, right? So wouldn't just the last received frame of all the framehook interfaces in the channels "framehooks" list be returned to the caller?</div><div><br></div><div>  Little more info on the issue:</div><div>- I use the "M" Dial option to lauch AMD on the channel</div><div>- If I dont use Originate (CLI or AMI) the issue dont happen, this is why I've related it to Local channels</div><div><br></div><div>Thanks in advance,</div><div>Gabriel Ortiz</div><div><br></div><div><br></div><div><div>static struct ast_frame *framehook_list_push_event(struct ast_framehook_list *framehooks, struct ast_frame *frame, enum ast_framehook_event event)</div><div>{</div><div><span class="" style="white-space:pre">      </span>struct ast_framehook *framehook;</div><div><br></div><div><span class="" style="white-space:pre">  </span>if (!framehooks) {</div><div><span class="" style="white-space:pre">         </span>return frame;</div><div><span class="" style="white-space:pre">      </span>}</div><div><br></div><div><span class="" style="white-space:pre"> </span>AST_LIST_TRAVERSE_SAFE_BEGIN(&framehooks->list, framehook, list) {</div><div><span class="" style="white-space:pre">          </span>if (framehook->detach_and_destroy_me) {</div><div><span class="" style="white-space:pre">                 </span>/* this guy is signaled for destruction */</div><div><span class="" style="white-space:pre">                 </span>AST_LIST_REMOVE_CURRENT(list);</div><div><span class="" style="white-space:pre">                     </span>framehook_detach_and_destroy(framehook);</div><div><span class="" style="white-space:pre">           </span>} else {</div><div><span class="" style="white-space:pre">                   </span>frame = framehook->i.event_cb(framehook->chan, frame, event, framehook->i.data);</div><div><span class="" style="white-space:pre">          </span>}</div><div><span class="" style="white-space:pre">  </span>}</div><div><span class="" style="white-space:pre">  </span>AST_LIST_TRAVERSE_SAFE_END;</div><div><span class="" style="white-space:pre">        </span>return frame;</div><div>}</div><div><br></div><div>struct ast_frame *ast_framehook_list_read_event(struct ast_framehook_list *framehooks, struct ast_frame *frame)</div><div>{</div><div><span class="" style="white-space:pre">       </span>return framehook_list_push_event(framehooks, frame, AST_FRAMEHOOK_EVENT_READ);</div><div>}</div></div><div><br></div></div>